Python:关闭和删除文件

Python:关闭和删除文件,python,file,Python,File,我正在尝试解压缩一个文件,读取其中一个解压缩文件,然后删除解压缩文件 提取的文件(例如,我们得到了文件1和文件2) 读取文件1,然后将其关闭 with open(file1, 'r') as f: data = f.readline() f.close() 对“数据”做些什么 删除提取的文件 os.remove(file1) 一切都很顺利,只是最后收到了这些信息。这些文件也被删除了。如何正确关闭文件 /tmp/file1: No such file or director

我正在尝试解压缩一个文件,读取其中一个解压缩文件,然后删除解压缩文件

  • 提取的文件(例如,我们得到了文件1和文件2)
  • 读取文件1,然后将其关闭

    with open(file1, 'r') as f:
        data = f.readline()
    f.close()
    
  • 对“数据”做些什么

  • 删除提取的文件

    os.remove(file1)
    
  • 一切都很顺利,只是最后收到了这些信息。这些文件也被删除了。如何正确关闭文件

        /tmp/file1: No such file or directory
        140347508795048:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/tmp/file1','r')
        140347508795048:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
    
    更新: (我的脚本看起来与这些类似)


    当对
    文件
    上下文管理器使用
    时,无需关闭文件句柄,当作用域发生更改时,即读线完成时,句柄将自动关闭


    请参见

    无需关闭文件句柄当将
    与文件一起使用上下文管理器时,当作用域发生更改时,即当读线完成时,句柄将自动关闭


    请参见

    您看到的错误不是Python报告的错误。它们意味着Python试图打开这些文件之外的其他东西,尽管很难从您的小片段中看出什么


    如果您只是试图从zip文件中检索一些数据,那么就没有理由将它们解压缩到磁盘。您只需使用
    zipfile.zipfile.open

    直接从zip文件读取数据,仅提取到内存,您看到的错误并不是Python报告的错误。它们意味着Python试图打开这些文件之外的其他东西,尽管很难从您的小片段中看出什么


    如果您只是试图从zip文件中检索一些数据,那么就没有理由将它们解压缩到磁盘。您只需使用
    zipfile.zipfile.open

    直接从zip文件读取数据,仅提取到内存,那么为什么脚本中会显示文件错误?我删除了f.close(),没有任何帮助。我认为您需要在上面添加更多的代码来说明原因,很难从您的代码片段中看出原因:
    subprocess.Popen(mycommand,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,close\u fds=True)
    。该命令只是一个openssl命令,用于输入我提取的一个文件。我该如何正确地做呢?我为这些新手问题感到抱歉。@super没有人发布新问题,请不要忘记发布所有代码。这个Q是可以接受的;因此,人们可能会跳过阅读它…那么为什么它会显示脚本中的文件错误呢?我删除了f.close(),没有任何帮助。我认为您需要在上面添加更多的代码来说明原因,很难从您的代码片段中看出原因:
    subprocess.Popen(mycommand,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,close\u fds=True)
    。该命令只是一个openssl命令,用于输入我提取的一个文件。我该如何正确地做呢?我为这些新手问题感到抱歉。@super没有人发布新问题,请不要忘记发布所有代码。这个Q是可以接受的;因此人们可能会跳过阅读…我没有意识到这一点。很高兴知道。该过程涉及将提取的文件之一作为“openssl”命令的输入,并通过子流程执行
    subprocess.Popen(mycommand,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,close\u fds=True)
    。这就是导致错误的原因。我还在寻找一个解决办法,我没有意识到这一点。很高兴知道。该过程涉及将提取的文件之一作为“openssl”命令的输入,并通过子流程执行
    subprocess.Popen(mycommand,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,close\u fds=True)
    。这就是导致错误的原因。我仍在寻找解决办法。
    #!/usr/bin/python
    import subprocess, os
    
    infile = "filename.enc"
    outfile = "filename.dec"
    opensslCmd = "openssl enc -a -d -aes-256-cbc -in %s -out %s" % (infile, outfile)   
    subprocess.Popen(opensslCmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,      close_fds=True)
    os.remove(infile)