簡體   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