Python:如何关闭我的CSV输入和输出文件?

Python:如何关闭我的CSV输入和输出文件?,python,csv,python-3.5,linux-mint,Python,Csv,Python 3.5,Linux Mint,您好,我一直在试验来自此线程的Winston Ewert的代码示例 但我无法关闭输入和输出文件。我做错了什么 写入文件。关闭() write\u infle.close() 回溯(最后一次调用):文件“Duplicates_01.py”,第26行,在write_outfile.close()AttributeError:“\u csv.writer”对象没有属性“close” File1.csv user, phone, email joe, 123, joe@x.com mary, 456,

您好,我一直在试验来自此线程的Winston Ewert的代码示例

但我无法关闭输入和输出文件。我做错了什么

写入文件。关闭()

write\u infle.close()

回溯(最后一次调用):文件“Duplicates_01.py”,第26行,在write_outfile.close()AttributeError:“\u csv.writer”对象没有属性“close”

File1.csv

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com
通过这样做:

csv.reader(open('File1.csv', 'r'))
您正在将匿名文件句柄传递给
csv.reader
对象,因此无法控制文件何时关闭(需要关闭的是该句柄,而不是
csv.reader
对象)

close
方法必须应用于文件句柄(csv读写器对象可以用于列表、迭代器等,它们不能有
close
方法),因此我会:

fr = open('File1.csv', 'r')

然后

或使用上下文管理器:

with open('File1.csv', 'r') as fr:
    csv.reader(fr)
文件将在您离开上下文后立即关闭


旁白:在某些python版本上创建csv文件时,有一个额外的问题。使用类似于
open('File2.csv','w')
的句柄可能会导致问题(插入空行)。为了使您能够以兼容且健壮的方式阅读,为什么不能关闭它们?你犯了什么错误?你为什么要把结束语注释掉?
csv.reader(fr)
fr.close()
with open('File1.csv', 'r') as fr:
    csv.reader(fr)