csv写入器未关闭文件
我正在读取一个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关闭这个文件。当我打开这个文件时,它显示为只读,因为它说文件仍然是打开的。
我该怎么做才能在完成后关闭thefile_subset1.csv这个文件呢?
6 个回答
6
要关闭的是文件,而不是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()
另外,我建议把所有的导入语句放在脚本的最上面,并在完成文件操作后关闭第一个文件。
25
你可以把打开文件的命令单独放到一个变量里,这样你就可以在需要的时候关闭它。
f = open('/pythonwork/thefile_subset1.csv', 'w')
writer = csv.writer(f)
f.close()
csv.writer
在你尝试往一个已经关闭的文件写东西时,会报一个 ValueError
错误。
37
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序根据特定的条件来执行不同的操作。这就像你在做决定时,会根据不同的情况选择不同的方案。例如,如果今天下雨,你可能会选择待在家里;如果天气晴朗,你就会出去玩。
在代码里,我们可以使用“条件语句”来实现这种逻辑。条件语句就像是一个判断的开关,它会检查某个条件是否成立,然后决定执行哪一段代码。最常见的条件语句是“if语句”。
简单来说,if语句的结构是这样的:
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)
这里的“条件”就是你要判断的事情。如果这个条件成立,程序就会执行“代码块1”;如果不成立,它就会执行“代码块2”。
通过这种方式,程序能够根据不同的情况做出不同的反应,让它变得更加灵活和智能。