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

pig*_*ggy 1 python csv linux-mint python-3.5

嗨,我一直在试验Winston Ewert的代码示例.

Python:删除重复的CSV条目

但我无法关闭输入和输出文件.我究竟做错了什么?

write_outfile.close()

write_infile.close()

回溯(最近一次调用最后一次):文件"Duplicates_01.py",第26行,在write_outfile.close()中AttributeError:'_ csv.writer'对象没有属性'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()
Run Code Online (Sandbox Code Playgroud)

File1.csv

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com
Run Code Online (Sandbox Code Playgroud)

Jea*_*bre 5

通过做:

csv.reader(open('File1.csv', 'r'))
Run Code Online (Sandbox Code Playgroud)

你正在向csv.reader对象传递一个匿名文件句柄,所以你无法控制何时关闭文件(这是需要关闭的句柄,而不是csv.reader对象)

close方法必须应用于文件句柄(csv reader/writer对象可以在列表,迭代器,...上工作,它们不能有close方法)所以我会这样做:

fr = open('File1.csv', 'r')
Run Code Online (Sandbox Code Playgroud)

csv.reader(fr)
Run Code Online (Sandbox Code Playgroud)

然后

fr.close()
Run Code Online (Sandbox Code Playgroud)

或使用上下文管理器:

with open('File1.csv', 'r') as fr:
    csv.reader(fr)
Run Code Online (Sandbox Code Playgroud)

离开上下文后,文件将立即关闭

除此之外:在某些python版本上创建csv文件时还有一个额外的问题.使用像open('File2.csv', 'w')可能会导致问题的句柄(插入空白行).要获得兼容且强大的方式,您可以阅读此问答


归档时间:

查看次数:

4181 次

最近记录:

8 年,2 月 前