Python: 如何关闭我的 CSV 输入和输出文件?
Python: How to close my CSV input and output files?
您好,我一直在尝试使用此线程中的 Winston Ewert 的 代码示例。
Python: Removing duplicate CSV entries
但是我无法关闭我的输入和输出文件。我做错了什么?
write_outfile.close()
write_infile.close()
Traceback (most recent call last): File "Duplicates_01.py", line 26, in write_outfile.close() AttributeError: '_csv.writer' object has no attribute 'close'
import csv
write_infile = csv.reader(open('File1.csv', 'r'))
write_outfile = csv.writer(open('File2.csv', 'w'))
#write_infile = open('File1.csv', 'r')
#f1 = csv.reader(write_infile)
#f1 = csv.reader(write_infile, delimiter=' ')
#write_outfile = open('File2.csv', 'w')
#f2 = csv.writer(write_outfile)
#f2 = csv.writer(write_outfile, delimiter=' ')
phone_numbers = set()
for row in write_infile:
if row[1] not in phone_numbers:
write_outfile.writerow(row)
# f2.writerow(row)
phone_numbers.add(row[1])
# write_outfile.close()
# write_infile.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 reader/writer 对象可以在列表、迭代器等上工作,它们不能有 close
方法)所以我会这样做:
fr = open('File1.csv', 'r')
和
csv.reader(fr)
然后
fr.close()
或使用上下文管理器:
with open('File1.csv', 'r') as fr:
csv.reader(fr)
离开上下文后文件将立即关闭
旁白:在某些 python 版本上创建 csv 文件时有一个额外的问题。使用像 open('File2.csv', 'w')
这样的句柄可能会导致问题(插入空行)。对于兼容和健壮的方式,您可以阅读
您好,我一直在尝试使用此线程中的 Winston Ewert 的 代码示例。
Python: Removing duplicate CSV entries
但是我无法关闭我的输入和输出文件。我做错了什么?
write_outfile.close()
write_infile.close()
Traceback (most recent call last): File "Duplicates_01.py", line 26, in write_outfile.close() AttributeError: '_csv.writer' object has no attribute 'close'
import csv
write_infile = csv.reader(open('File1.csv', 'r'))
write_outfile = csv.writer(open('File2.csv', 'w'))
#write_infile = open('File1.csv', 'r')
#f1 = csv.reader(write_infile)
#f1 = csv.reader(write_infile, delimiter=' ')
#write_outfile = open('File2.csv', 'w')
#f2 = csv.writer(write_outfile)
#f2 = csv.writer(write_outfile, delimiter=' ')
phone_numbers = set()
for row in write_infile:
if row[1] not in phone_numbers:
write_outfile.writerow(row)
# f2.writerow(row)
phone_numbers.add(row[1])
# write_outfile.close()
# write_infile.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 reader/writer 对象可以在列表、迭代器等上工作,它们不能有 close
方法)所以我会这样做:
fr = open('File1.csv', 'r')
和
csv.reader(fr)
然后
fr.close()
或使用上下文管理器:
with open('File1.csv', 'r') as fr:
csv.reader(fr)
离开上下文后文件将立即关闭
旁白:在某些 python 版本上创建 csv 文件时有一个额外的问题。使用像 open('File2.csv', 'w')
这样的句柄可能会导致问题(插入空行)。对于兼容和健壮的方式,您可以阅读