【问题标题】:Easiest way to get a specific section of a file path [duplicate]获取文件路径特定部分的最简单方法[重复]
【发布时间】:2014-05-24 16:54:14
【问题描述】:

我有一个棘手的问题要解决。我需要提取文件路径的特定部分。我在临时目录下提取了一个 zip 文件,其中包含该文件的完整路径。基本上我想要的是获得完整文件路径和临时路径之间的区别。下面我举个例子:

Fullpath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt

TempPath = c:\\users\\test\\appdata\\local\\temp\\tempDir\\

所以我的预期结果是:

results = \\common\\test.txt

只是在寻找一种简单的 Pythonic 方式来完成此任务。

【问题讨论】:

  • 记住,临时目录下的这个子目录路径是可以改变的。文件的深度可能是 1 级或多级。
  • 一个强大的解决方案将解析不同的绝对路径解析到同一个工作目录。

标签: python parsing filepath fileparsing fileparse


【解决方案1】:

你可以使用os.path.relpath:

os.path.relpath(Fullpath, TempPath)

或者你可以使用拆分:

Fullpath.split(TempPath)[1]

或者你可以使用commonprefix和replace as:

Fullpath.replace(os.path.commonprefix([Fullpath, TempPath]),'')

输出:

common\test.txt

【讨论】:

  • 感谢您的回复。我喜欢“os.path.relpath(Fullpath, TempPath)”的用法。我想我剩下的问题是如何剥离文件名并离开目录。例如,结果将是 common\ 而不是 common\test.txt
【解决方案2】:
results = '\\' + Fullpath.replace(TempPath, '')

或者如果你想确保删除字符串的开头:

import re
results = '\\' + re.sub('^%s' % TempPath, '', Fullpath)

【讨论】:

    【解决方案3】:

    一种不太可靠的方法是使用os.path.commonprefix

    import os
    
    Fullpath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'
    TempPath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\'
    
    print os.path.commonprefix([Fullpath, TempPath])
    # c:\users\test\appdata\local\temp\tempDir\
    

    请注意,该函数对路径一无所知;它是just a character by character deal

    然后使用str.partition获取你感兴趣的部分:

    >>> print Fullpath.partition(os.path.commonprefix([Fullpath, TempPath]))
    ('', 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\', 'common\\test.txt')
    

    如果你有这样的情况:

    Fullpath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'
    TempPath = 'c:\\users\\test\\appdata\\local\\temp\\tempDir\\co'  
    

    公共前缀最好用 os.path.dirname 包起来

    >>> os.path.dirname(os.path.commonprefix([Fullpath, TempPath]))
    c:\users\test\appdata\local\temp\tempDir\
    

    但这仍然不能解决这样的情况:

    Fullpath = 'c:\\users\\test\\..\\test\\appdata\\local\\temp\\tempDir\\common\\test.txt'
    

    您需要在解析之前解析完整的绝对路径名。

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 2016-12-12
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      相关资源
      最近更新 更多