运行这个简单的脚本时," output_file.csv"仍然开放。我不确定在这种情况下如何关闭文件。
我已经查看了其他示例,其中open()函数被分配给变量,例如' f',并且使用f.close()关闭对象。由于with
/ as csv-file
,我不清楚文件对象的实际位置。有人会在概念上解释断开连接的位置吗?理想情况下,想知道:
import csv
output_file = csv.writer(open('output_file.csv', 'w'))
csv.register_dialect('mydialect', doublequote=False, quotechar="'")
def csv_writer(data):
with open('output_file.csv',"ab") as csv_file:
writer = csv.writer(csv_file, delimiter=',', lineterminator='\r\n', dialect='mydialect')
writer.writerow(data)
D = [[]]
for line in open('inventory_skus.csv'):
clean_line = line.strip()
data_points = clean_line.split(',')
print data_points
D.append([line.strip().split(',')[0], line.strip().split(',')[1]])
D2 = D
for i in range(1, len(D)):
nr = D[i]
if D[i][0] == '':
D2[i][0] = D[i-1][0]
else:
D2[i] = D[i]
for line in range(1, len(D2)):
csv_writer(D2[line])
print D2[line]
答案 0 :(得分:0)
实际上,您正在创建两个文件对象(以两种不同的方式)。第一个:
output_file = csv.writer(open('output_file.csv', 'w'))
然而,这隐藏在csv.writer
内并且未被相同的曝光
你根本不使用那个输出编写器,包括不关闭它。所以它一直开放,直到收集垃圾。
在
with open('output_file.csv',"ab") as csv_file:
您在csv_file
中获取了文件对象。上下文块负责关闭对象,因此无需手动关闭它(文件对象是上下文管理器)。
手动索引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