Python 2.7 Python脚本找不到要关闭的文件对象
运行此简单脚本时,“output_file.csv”保持打开状态。我不确定在这种情况下如何关闭文件 我看了其他例子,其中open()函数被分配给一个变量,如“f”,对象使用f.close()关闭。由于使用/asPython 2.7 Python脚本找不到要关闭的文件对象,python-2.7,Python 2.7,运行此简单脚本时,“output_file.csv”保持打开状态。我不确定在这种情况下如何关闭文件 我看了其他例子,其中open()函数被分配给一个变量,如“f”,对象使用f.close()关闭。由于使用/ascsv文件的,我不清楚文件对象的实际位置。有人介意从概念上解释一下断开的地方吗?理想情况下,我想知道: 如何检查所有打开文件对象的命名空间 如何确定关闭这些对象的正确方法 用于读取列1中映射为空的数据列的简单脚本,请填写 实际上,您正在创建两个文件对象(以两种不同的方式)。第一个: out
csv文件
的,我不清楚文件对象的实际位置。有人介意从概念上解释一下断开的地方吗?理想情况下,我想知道:
如何检查所有打开文件对象的命名空间
如何确定关闭这些对象的正确方法
用于读取列1中映射为空的数据列的简单脚本,请填写
实际上,您正在创建两个文件对象(以两种不同的方式)。第一个:
output_file = csv.writer(open('output_file.csv', 'w'))
但是,它隐藏在csv.writer
中,不会被相同的文件公开
您根本不使用该输出编写器,包括不关闭它。所以它会一直打开直到垃圾被收集
在
您可以在csv\u文件
中获取文件对象。上下文块负责关闭对象,因此无需手动关闭它(文件对象是上下文管理器)
不需要在D2
上手动编制索引。另外,为什么要以二进制模式打开CSV文件
def write_data_row(csv_writer, data):
writer.writerow(data)
with open('output_file.csv',"w") as csv_file:
writer = csv.writer(csv_file, delimiter=',', lineterminator='\r\n', dialect='mydialect')
for line in D2[1:]:
write_data_row(writer, line)
print line
您正在脚本顶部执行一个不必要的显式open
,但没有关闭它。那么,为什么您对文件仍然处于打开状态感到惊讶呢?可能与我最初尝试将output\u file.close()放在末尾的结果相同,但出现了以下错误:output\u file.close()AttributeError:“\u csv.writer”对象没有属性“close”删除初始output\u file=csv.writer(open('output\u file.csv',w'))仍然使文件保持打开状态啊,谢谢。我从一开始就删除了不必要的输出文件。但是,第二个对象似乎没有被上下文块关闭。当我在控制台中运行时,“csv_文件”未在此块之外定义,因此我不确定如何关闭它。如何确定它未关闭?如果我在with块之后尝试writer.writerow('abc')
,我会得到ValueError:I/O操作关闭的文件
。打开output_file.csv时,我会从excel中得到一个错误,表示另一个用户/程序正在使用的文件对象具有closed
属性。用
块检查后的状态。您是否确保没有对同一文件的其他引用(如刚刚删除的文件)?
with open('output_file.csv',"ab") as csv_file:
def write_data_row(csv_writer, data):
writer.writerow(data)
with open('output_file.csv',"w") as csv_file:
writer = csv.writer(csv_file, delimiter=',', lineterminator='\r\n', dialect='mydialect')
for line in D2[1:]:
write_data_row(writer, line)
print line