为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2022-12-20 15:06:42
我正在尝试使用 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 columnsprint(table1)输出看起来不错:((0.0, 0.0), (0.0, 0.0), (0.00543154732031037, 4.2724591391866636e-05), (0.0347155846128363, 0.00021518683772895567), (0.1014894975795... etc我相信有更好的方法可以做到这一点。请注意,我只能使用内置模块,这就是我不使用 Pandas 的原因。谢谢你的任何建议。
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

为什么不使用元组列表 - 那么你可以使用列表理解:


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'))


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信