-2
我有一个CSV文件,其中有超过100k条记录,并且在该记录中,一列中的值以逗号分隔,我想对该逗号分隔值进行排序。ValueError:关闭的文件上的I/O操作
的样本数据:
"PT3QB789TSUIDF371261","THE TORONTO,DOMINION BANK","HZSN7FQBPO5IEWYIGC72","MAS,CA.ON.OSC,ASIC*,AAAA","XVCCCCCCCCCCYYUUUUU"
"11111111111111111111","ABC,XYZ,QWE","HZSN7FQBPO5IEWYIGC72","POU,ABC,MAS,CA.QC.OSC,CA.ON.OSC","XVRRRRRRRRTTTTTTTTTTTTT"
"22222222222222222222","BHC,NBC,MKY","HZSN7FQBPO5IEWYIGC72","BVC,AZX,CA.SK.FCAA,CA.NL.DSS","QQQQQQQQQRRCGHDKLKSLS"
正如你可以看到有列2和4是有逗号分隔值列,但我想只有4个值进行排序。 所以我的输出看起来应该如下:
"PT3QB789TSUIDF371261","THE TORONTO,DOMINION BANK","HZSN7FQBPO5IEWYIGC72","AAAA,ASIC*,CA.ON.OSC,MAS","XVCCCCCCCCCCYYUUUUU"
"11111111111111111111","ABC,XYZ,QWE","HZSN7FQBPO5IEWYIGC72","ABC,CA.ON.OSC,CA.QC.OSC,MAS,POU","XVRRRRRRRRTTTTTTTTTTTTT"
"22222222222222222222","BHC,NBC,MKY","HZSN7FQBPO5IEWYIGC72","AZX,BVC,CA.NL.DSS,CA.SK.FCAA","QQQQQQQQQRRCGHDKLKSLS"
,我想写的代码如下:
#!/usr/bin/python
import csv
OUT_FILE = '/proj/ctc/temp/sanjay/REC-754/2017-05-29_IR_Position_Report_US_US_2017-05-30_out.csv'
IN_FILE = '/proj/ctc/temp/sanjay/REC-754/2017-05-29_IR_Position_Report_US_US_2017-05-30.csv'
f = open(IN_FILE, 'r')
o = open(OUT_FILE,'w')
with f:
reader = csv.reader(f)
with o:
writer = csv.writer(o)
for row in reader:
reportable_jurisdiction=row[68]
if ',' in reportable_jurisdiction:
row[68]=sorted(list(row[68].split(',')))
print " reportable Jurisdiction with comma "+reportable_jurisdiction
else:
print "reportable Jurisdiction if single "+reportable_jurisdiction
if(f.closed):
f=open(IN_FILE,"r")
if(o.closed):
o=open(OUT_FILE,"w")
writer.writerow(row)
print(row)
,但是当我执行这个python脚本我得到以下错误:
$./Csvreader2.py
Traceback (most recent call last):
File "./Csvreader2.py", line 15, in <module>
for row in reader:
ValueError: I/O operation on closed file
我走出这个问题和问题是与代码 的缩进,但我得到了新的问题
Traceback (most recent call last):
File "./Csvreader2.py", line 14, in <module>
reportable_jurisdiction=row[68]
IndexError: list index out of range
在我的CSV文件中有100多列,但为什么会出现此错误?
缩进你的代码。您需要保持文件处于打开状态,直到完成读取操作为止,'csv.reader()'不会将所有数据存入内存,您需要保持文件处于打开状态。 –
感谢您的输入..代码以相同的方式缩进。但问题仍然一样。 – user2779202
是的,我是说问题出在你的缩进上。这是错误的。您需要将第二个'with'语句缩进到与'reader ='相同的级别,或者将这两个'with'语句合并为一个。你的第一个'with'语句*结束*并且关闭'f'。 –