0

少し難しい問題があります。ファイル パスの特定の部分を抽出する必要があります。一時ディレクトリの下に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 な方法を探しています。

4

3 に答える 3

0
results = '\\' + Fullpath.replace(TempPath, '')

または、文字列の先頭を確実に削除したい場合:

import re
results = '\\' + re.sub('^%s' % TempPath, '', Fullpath)
于 2014-04-10T19:40:23.547 に答える
0

完全に堅牢ではない方法は、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\

関数はパスについて何も知らないことに注意してください。それはただのキャラクターごとの取引です。

次に、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'

解析する前に完全な絶対パス名を解決する必要がある場所。

于 2014-04-10T19:36:54.700 に答える