2017-05-31 82 views
1

我有他的名字,我能夠成功地讀取和存儲在一個變量tar文件,從文件名中提取的名稱字符串,並將其存儲在一個變量在Python

tarname = 'esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar' 

但我怎麼只提取「Mona」從這個文件名中存儲在一個變量中?

(tar文件的文件名結構與上述名稱相同,名稱在「es-archive - {Name} -AB」之後出現,因此解決方案返回任何名稱都符合此條件的名稱格式)

謝謝!

+0

可以將名字包括破折號?如果沒有,我會試着用'tarname.split(' - ')[2]'。 –

+0

我們需要關於您可能遇到的一組可能的文件名的更多信息來回答這個問題。 –

+0

這個名字應該是一個簡單的名字,像你的和我的,但是它之前和之後的破折號是我爲各種人收到的原始文件的一部分。就像--Jamy-AB –

回答

1
>>> import re 
>>> tarname = "esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar" 
>>> s = re.match("esarchive--(\w+)-AB", tarname).group(1) 
>>> s 
'Mona' 
+0

真的很有幫助。用我現有的代碼工作就像一個魅力! –

3

我能想到的最簡單的方法:

  1. 拆分對-字符的文件名。
  2. 從結果列表中獲取第3項(索引2)。

在代碼:

filename.split('-')[2] 

簡單的一行。這當然是你的榜樣。我需要更多的示例文件名來解釋可能的變化,並且確定它是否會始終有效。

+0

這種方法的問題是,如果數據並不總是完全如預期的那樣,那麼您可能會得到一個不正確的結果(默默地說,當您希望有某種未處理的異常提升時) – wim

8

parse模塊很適合這種東西。你可以把它想成str.format的倒數。

from parse import parse 
pattern = 'esarchive--{Name}-AB-{otherstuff}.tar' 
result = parse(pattern, tarname) 

演示:

>>> result = parse(pattern, tarname) 
>>> result['Name'] 
'Mona' 
>>> result.named 
{'Name': 'Mona', 
'otherstuff': 'Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4'} 
+0

一般使用的最佳答案。 – stybl

+0

謝謝!這樣好的解決方案 –

相關問題