猿问

使用 csv 阅读器读取数值数据

我正在尝试使用 csv 阅读器读取 csv 表,我想将数据重写为元组的元组,其中每个子元组都包含原始文件中一行的数据。我正在执行以下操作并且工作正常,但您可以看到它看起来有多难看。


table1 = tuple()

with open('data.csv', newline='') as f:

    reader = csv.reader(f)

    for row in reader:

        print(row)

        table1 = table1.__add__(tuple([tuple([float(row[0]), float(row[1])])]))  # giving that I know the data is arranged in two columns

print(table1)

输出看起来不错:


((0.0, 0.0), (0.0, 0.0), (0.00543154732031037, 4.2724591391866636e-05), (0.0347155846128363, 0.00021518683772895567), (0.1014894975795... etc

我相信有更好的方法可以做到这一点。请注意,我只能使用内置模块,这就是我不使用 Pandas 的原因。谢谢你的任何建议。


繁星coding
浏览 130回答 1
1回答

慕丝7291255

为什么不使用元组列表 - 那么你可以使用列表理解:with open('data.csv', newline='') as f:    reader = csv.reader(f)    table1 = [(float(row[0]), float(row[1])) for row in reader]如果你真的需要一个元组而不是一个列表:tuple()接受迭代,所以你可以将列表理解传递给它:    table1 = tuple((float(row[0]), float(row[1])) for row in reader)列表/元组适用于需要重复访问/随机访问所有包含元素的情况。另一种选择是生成器——适用于以“一次性、仅向前”方式处理输入的所有情况:def read_data(filename):    with open(filename, newline='') as f:        reader = csv.reader(f)        for row in reader:            yield (float(row[0]), float(row[1]))for item in read_data('data.csv'):    print(item)当然你也可以从生成器创建一个列表:table1 = [item for item in read_data('data.csv')]# ortable1 = tuple(item for item in read_data('data.csv'))
随时随地看视频慕课网APP

相关分类

Python
我要回答