Python脚本无法找到要关闭的文件对象

时间:2015-04-29 17:56:09

标签: python-2.7

运行这个简单的脚本时," output_file.csv"仍然开放。我不确定在这种情况下如何关闭文件。

我已经查看了其他示例,其中open()函数被分配给变量,例如' f',并且使用f.close()关闭对象。由于with / as csv-file,我不清楚文件对象的实际位置。有人会在概念上解释断开连接的位置吗?理想情况下,想知道:

  1. 如何检查所有打开文件对象的命名空间
  2. 如何确定关闭这些对象的正确方法
  3. 读取第1列中的映射为空白的数据列的简单脚本,填写

    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]
    

1 个答案:

答案 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