为什么Python zipfile不解压缩这些文件?

时间:2019-07-19 17:37:22

标签: python-3.x zipfile

我有一些适用于某些文件的代码,但不适用于其他文件。我很困惑!我采用了相同的文件,并用不同的名称复制了十次以模拟生产案例。

文件将位于两个不同的路径中。 path_one有效,但path_two无效。

import zipfile

path_one = "/tmp/my_files_one"
path_two = "/tmp/my_files_two"

for file in os.listdir(path_one):
    print("xx", file)
#    if zipfile.is_zipfile(file):
#        print("in here")
    with zipfile.ZipFile(file, 'r') as zipo:
        zipo.extractall(path=path_one)

但是如果我使用path_two,则会出现此错误:

xx file_two.zip
Traceback (most recent call last):
  File "./this_script.py", line 95, in <module>
    with zipfile.ZipFile(file, 'r') as zipo:
  File "/usr/lib64/python3.4/zipfile.py", line 923, in __init__
    self.fp = io.open(file, modeDict[mode])
FileNotFoundError: [Errno 2] No such file or directory: 'file_two.zip'

文件肯定在路径中。我已经取消对is_zipfile部分的注释,因为它不是真的,即使其他文件也是如此。

为什么?

1 个答案:

答案 0 :(得分:1)

问题似乎出在相对路径上,并且您从/ tmp / my_files_one运行命令,从而使它成为当前工作目录。

尝试使用os.path.join(dir,file)获取文件的绝对路径

import zipfile

path_one = "/tmp/my_files_one"
path_two = "/tmp/my_files_two"

for file in os.listdir(path_two):
    file = os.path.join(path_two, file)
    print("xx", file)
    if zipfile.is_zipfile(file):
        print("in here")
    with zipfile.ZipFile(file, 'r') as zipo:
        zipo.extractall(path=path_two)