我正在读取一个csv文件,然后写一个新文件:
import csv
with open('thefile.csv', 'rb') as f:
data = list(csv.reader(f))
import collections
counter = collections.defaultdict(int)
for row in data:
counter[row[11]] += 1
writer = csv.writer(open('/pythonwork/thefile_subset1.csv', 'w'))
for row in data:
if counter[row[11]] >= 500:
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我无法让csv.writer关闭文件.当我打开文件时,它只打开它,因为它说它仍然是打开的.
我完成后如何关闭file_subset1.csv?
Joh*_*ooy 28
with open('/pythonwork/thefile_subset1.csv', 'w') as outfile:
writer = csv.writer(outfile)
for row in data:
if counter[row[11]] >= 500:
writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
Don*_*ner 23
您可以将open命令分解为自己的变量,以便稍后关闭它.
f = open('/pythonwork/thefile_subset1.csv', 'w')
writer = csv.writer(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
csv.writer
ValueError
如果您尝试写入已关闭的文件,则抛出a .
关闭文件,而不是csv编写器.为此,您需要在实例化编写器之前先打开文件,而不是将其全部保存在一行中.
import csv
import collections
with open('thefile.csv', 'rb') as f:
data = list(csv.reader(f))
counter = collections.defaultdict(int)
for row in data:
counter[row[11]] += 1
f.close() # good idea to close if you're done with it
fSubset = open('/pythonwork/thefile_subset1.csv', 'w')
writer = csv.writer(fSubset)
for row in data:
if counter[row[11]] >= 500:
writer.writerow(row)
fSubset.close()
Run Code Online (Sandbox Code Playgroud)
此外,我建议您将导入保留在脚本的顶部,并在完成后关闭第一个文件.
强制写入器清理:
del writer
Run Code Online (Sandbox Code Playgroud)