【问题标题】:How to insert strings and slashes in a path?如何在路径中插入字符串和斜杠?
【发布时间】:2016-09-07 13:17:04
【问题描述】:

我正在尝试提取位于名为 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')

这给出了:错误

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

【问题讨论】:

  • 您不需要转义正斜杠,只需转义反斜杠即可。此外,在 python 中处理 Windows 文件路径时,通常最好使用原始字符串。
  • 你不能直接cd 到 srm01 并在那里打开你的文件吗?
  • Python windows path slash的可能重复

标签: python python-2.7 filepath glob tarfile


【解决方案1】:

为了加入路径,您必须使用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))

【讨论】:

    【解决方案2】:

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

    f = os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz')
    

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 2013-09-03
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多