繁体   English   中英

csv writer没有关闭文件

[英]csv writer not closing file

我正在读取一个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)

由于某种原因,我无法让csv.writer关闭文件。 当我打开文件时,它只打开它,因为它说它仍然是打开的。

我完成后如何关闭file_subset1.csv?

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)

您可以将open命令分解为自己的变量,以便稍后关闭它。

f = open('/pythonwork/thefile_subset1.csv', 'w')
writer = csv.writer(f)
f.close()

如果您尝试写入已关闭的文件,则csv.writer会抛出ValueError

关闭文件,而不是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()

此外,我建议您将导入保留在脚本的顶部,并在完成后关闭第一个文件。

强制作者清理:

del writer

看看差异:

with open('thefile.csv', 'rb') as f:
    data = list(csv.reader(f))

VS:

writer = csv.writer(open('/pythonwork/thefile_subset1.csv', 'w'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM