2016-11-02 34 views
1

因此,我有一個url列表(在下面的代碼段中稱爲lst)url。如何在列表中的單個條目上使用拆分

/this/is/the/first/url/file.zip 
/this/is/the/second/url/file.zip 
... 

我想創建另一個只有每個url的/file.zip部分的列表。到目前爲止,我有這個:

lst2 = [] 
for i in lst: 
    lst2.append(i[0].split('/')][-1]) 

並且它按預期返回/file.zip部分。但我的問題是,我怎麼能爲整個列表做這件事?

+0

這裏是什麼'lst'? – yper

+0

這是包含url的python列表。我編輯了這篇文章,作了澄清 – e9e9s

+0

@Wintro。這是我認爲會工作的相同的配方,但我運行它時得到這條消息:AttributeError:'list'對象沒有'split'屬性 – e9e9s

回答

3

假設lst = [url1, url2, ...],您的當前代碼非常接近最佳工作狀態。

代碼lst2.append(i[0].split('/')][-1])的最後一行是問題所在。

通過調用i[0]你基本上得到i字符串的第一個字符(因爲i從內部lst字符串派生),然後根據/,這是行不通的分裂它。然後,在split之後,您與唯一]發生了錯誤。

所以,要解決這個問題,這裏是你要做的。

lst2 = [] 
for i in lst: 
    lst2.append(i.split('/')[-1]) 

,然後打印lst2會給

['file.zip', 'file1.zip', ...]

這是你想要的輸出。


講解,i in lst是獲得lst名單,這是字符串內的每個項目。然後,在循環內部,根據其中的/將字符串i拆分,從而生成另一個數組。但是你需要該字符串的最後部分,因此是數組中的最後一項,可以使用[-1]來訪問。

0

您可以使用列表理解:

lst2 = [url.rsplit('/', 1)[-1] for url in lst] 
0

您可以用list comprehension做到這一點。

lst = [ 
'/this/is/the/url/file.zip', 
'/this/is/the/url/file1.zip', 
'/this/is/the/url/file2.zip', 
'/this/is/the/url/file3.zip', 
'/this/is/the/url/file4.zip', 
] 

lst2 = [l.split('/')[-1] for l in lst] 

lst2現在看起來是這樣的:

['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip'] 
0

除了@Wintro答案:

你所需要的 '/' 開頭的搜索結果(/file1.zip)?那麼你必須再次預先考慮它,因爲split()會使它消失。

我建議你使用Python內置pathlibos.path.basenameos.path.splithttps://docs.python.org/3/library/pathlib.htmlhttps://docs.python.org/2/library/os.path.html#os.path.basename

此外,您還可以使用循環理解:

urllst = ["url1/file1.zip", "url2/file2.zip", "..."] 
filelst = ['/' + url.split('/')[-1] for url in lst] 
0

雖然它可能不會在這種情況下是必要的,它是爲這些功能使用適當的庫總是一個好主意。在這種情況下,即os模塊:

>>> import os 
>>> [os.path.basename(i) for i in lst] 
['file.zip', 'file1.zip', 'file2.zip', 'file3.zip', 'file4.zip']