Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python脚本找不到要关闭的文件对象_Python 2.7 - Fatal编程技术网

Python 2.7 Python脚本找不到要关闭的文件对象

Python 2.7 Python脚本找不到要关闭的文件对象,python-2.7,Python 2.7,运行此简单脚本时,“output_file.csv”保持打开状态。我不确定在这种情况下如何关闭文件 我看了其他例子,其中open()函数被分配给一个变量,如“f”,对象使用f.close()关闭。由于使用/ascsv文件的,我不清楚文件对象的实际位置。有人介意从概念上解释一下断开的地方吗?理想情况下,我想知道: 如何检查所有打开文件对象的命名空间 如何确定关闭这些对象的正确方法 用于读取列1中映射为空的数据列的简单脚本,请填写 实际上,您正在创建两个文件对象(以两种不同的方式)。第一个: out

运行此简单脚本时,“output_file.csv”保持打开状态。我不确定在这种情况下如何关闭文件

我看了其他例子,其中open()函数被分配给一个变量,如“f”,对象使用f.close()关闭。由于使用/as
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