使用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 的原因。 感谢您的任何建议。

为什么不使用元组列表 - 那么你可以使用列表推导

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')]
# or
table1 = tuple(item for item in read_data('data.csv'))

最新更新