开发者

Python: Closing and removing files

开发者 https://www.devze.com 2023-03-10 02:40 出处:网络
I\'m trying to unzip a file, and read one of the extracted files, and delete the extracted files. Files extracted (e.g. we got file1 and file2)

I'm trying to unzip a file, and read one of the extracted files, and delete the extracted files.

  1. Files extracted (e.g. we got file1 and file2)
  2. Read file1, and close it.

    with open(file1, 'r') as f:
        data = f.readline()
    f.close()
    
  3. Do something with the "data".

  4. Remove the files extracted.

    os.remove(file1)
    

Everything went fine, except it received these messages at the end. The files were also removed. How do I close the files properly?

    /tmp/file1: No such file or directory
    140347508795048:error:02001002:system library:fopen:No such f开发者_运维知识库ile or directory:bss_file.c:398:fopen('/tmp/file1','r')
    140347508795048:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:

UPDATE: (My script looks similar to these)

#!/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)


No need to close a file handle when using with with a file context manager, the handle is automatically closed when the scope have changed, i.e. when readline is done.

See python tutorial


The errors you see are not errors as Python would report them. They mean something other than Python tried to open these files, although it's hard to tell what from your little snippet.

If you're simply trying to retrieve some data from a zip file, there isn't really a reason to extract them to disk. You can simply read the data directly from the zip file, extracting to memory only, with zipfile.ZipFile.open.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号