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

从 CSV 检索数据并将其保存到列表中时遇到问题

从 CSV 检索数据并将其保存到列表中时遇到问题

慕村9548890 2021-09-28 17:07:38
我的 Data.csv 文件如下所示:0001 ABC 0002 CDE 0003 FGH我打算放入一个列表,即tickerinfo:股票信息 = [['00001','ABC'],['00002','CDE'],['00003','FGH']]我的代码:import csvtickerinfo = [] ticker=['','']with open('Data.csv') as csvfile:    readCSV = csv.reader(csvfile, delimiter=',')            for row in readCSV:        ticker[0] = row[0]        ticker[0] = '0000' + str(ticker[0])        ticker[0] = ticker[0][-5:]        ticker[1] = row[1]        tickerinfo.append(ticker)    print(tickerinfo)结果:[['00003', 'FGH'], ['00003', 'FGH'], ['00003', 'FGH']]为什么会这样?以及如何解决问题?为什么所有元素都是 0003 而不是 0001,0002 和 0003 的顺序?
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

尝试这个:


import csv


with open('Data.csv') as csvfile:

    readCSV = csv.reader(csvfile, delimiter=' ')

    tickerinfo= [[row[0].zfill(5), row[1]] for row in readCSV]

您的代码工作正常,唯一的小问题是您ticker在结果中附加了三遍,首先,迭代代码将是,['0001', 'ABC']但是当您更改时,ticker您将更改ticker已添加到结果中的内容,以便您更好地理解print(tickerinfo)在循环中添加, 你会得到 :


[['00001', 'ABC']]

[['00002 ', 'CDE'], ['00002 ', 'CDE']]

[['00003', 'FGH'], ['00003', 'FGH'], ['00003', 'FGH']]

所以为了修复你的代码,你可以使用copy或[:]喜欢这样的:


 tickerinfo.append(ticker[:])

或者


from copy import copy


tickerinfo.append(ticker.copy())


查看完整回答
反对 回复 2021-09-28
?
慕仙森

TA贡献1827条经验 获得超8个赞

您正在使用delimiter=','但 csv 文件由' '(空格)分隔,因此将分隔符更改为delimiter=' '. 你可以这样做:


import csv


ticker_info = []

with open('Data.csv', 'r') as f:

    reader = csv.reader(f, delimiter=' ')

    for i in reader:

        # use zfill if you want more zeros

        ticker_info.append( [i[0].zfill(5), i[1]] ) 


print(ticker_info) // result [['00001', 'ABC'], ['00002', 'CDE'], ['00003', 'FGH']]


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号