0

我正在尝试提取位于名为 srm01、srm02 和 srm03 的不同文件中的 tar.gz 文件。文件名必须在输入(字符串)中才能运行我的代码。我正在尝试做这样的事情:

import tarfile
import glob

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob('C://Users//asediri//Downloads/srm/'+thirdBloc+'/'+'*.tar.gz'):
    tar = tarfile.open(f)
    tar.extractall('C://Users//asediri//Downloads/srm/'+thirdBloc)

我有这个错误信息:

IOError: CRC check failed 0x182518 != 0x7a1780e1L

我首先要确保我的代码找到 .tar.gz 文件。所以我试图在 glob 之后打印我的路径:

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob('C://Users//asediri//Downloads/srm/'+thirdBloc+'/'+'*.tar.gz'):
    print f

这给出了:

C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz
C://Users//asediri//Downloads/srm/srm01\20160707003501-server.log.1.tar.gz

os.path.exists 方法告诉我我的文件不存在。

print os.path.exists('C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz')

这给出了:假

有什么办法可以正确地完成这项工作吗?首先拥有正确路径的最佳方法是什么?

4

3 回答 3

2

为了加入路径,您必须使用os.path.join如下:

import os

import tarfile
import glob

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob(os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz'):
    tar = tarfile.open(f)
    tar.extractall(os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc))
于 2016-09-07T13:30:30.513 回答
0

C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz

永远不要在 python 中使用 \ 作为文件路径,\201 是 \x81 字符。结果是这样的:

C://Users//asediri//Downloads/srm/srm01ü60707000001-server.log.1.tar.gz

这就是为什么 os.path.exists 找不到它的原因

或使用(r"C:\...")

我建议你这样做:

import os
os.chdir("C:/Users/asediri/Downloads/srm/srm01")
for f in glob.glob(str(thirdBloc) + ".tar.gz"):
    print f
于 2016-09-07T13:33:19.380 回答
0

os.path.join 将为您的文件系统创建正确的路径

f = os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz')
于 2016-09-07T13:32:26.030 回答