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

Posted

技术标签:

【中文标题】Python:如何关闭我的 CSV 输入和输出文件? [复制]【英文标题】:Python: How to close my CSV input and output files? [duplicate] 【发布时间】:2018-01-28 20:35:07 【问题描述】:

您好,我一直在尝试使用此线程中的 Winston Ewert 的代码示例。

Python: Removing duplicate CSV entries

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

write_outfile.close()

write_infile.close()

回溯(最近一次调用最后):文件“Duplicates_01.py”,第 26 行,在 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()

文件1.csv

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com

【问题讨论】:

为什么不能关闭它们?你遇到了什么错误?为什么要注释掉关闭语句? 【参考方案1】:

通过做:

csv.reader(open('File1.csv', 'r'))

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

close 方法必须适用于文件句柄(csv 读取器/写入器对象可以在列表、迭代器等上工作,它们不能有 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') 这样的句柄可能会导致问题(插入空白行)。对于兼容且强大的方式,您可以阅读this Q&A

【讨论】:

以上是关于Python:如何关闭我的 CSV 输入和输出文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在将数据输入 FFT 用于音频频谱分析仪之前,使用 python 将 wav 文件转换为 csv 文件 [关闭]

如何将csv文件输入Django [关闭]

如何使用 Python 从 OS Windows 将 CSV 文件加载到 Amazon Redshift? [关闭]

如何读取csv文件和excel文件python? [关闭]

Python脚本从文本文件grep字段并将输出写入csv文件

使用 Python Pandas 写入 to_csv:选择要插入新数据的列索引