2016-11-02 1 views
1

So habe ich eine Python-Liste (namens lst im Schnipsel unten) von URLs.So verwenden Sie Split auf einzelne Einträge in einer Liste

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

Ich möchte eine andere Liste nur der /file.zip Teil jeder URL erstellen. Bisher habe ich das:

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

und es gibt den /file.zip Teil wie erwartet zurück. Aber meine Frage ist, wie kann ich das für die gesamte Liste tun?

+0

Was ist 'lst' hier? – yper

+0

Es ist die Python-Liste, die die URLs enthält. Ich habe den Beitrag zur Klarstellung bearbeitet – e9e9s

+0

@Wintro. Das ist das gleiche Rezept, das ich dachte, würde auch funktionieren, aber ich bekomme diese Nachricht, wenn ich es ausführen: AttributeError: 'Liste' Objekt hat kein Attribut 'Split' – e9e9s

Antwort

3

Angenommen lst = [url1, url2, ...], ist Ihr aktueller Code sehr nahe daran, optimal zu arbeiten.

Die letzte Zeile des Codes lst2.append(i[0].split('/')][-1]) ist, wo die Probleme liegen.

von i[0] rufen Sie bekommen im Wesentlichen das erste Zeichen des i Zeichenfolge (da die i von den Saiten im Inneren lst ableitet) und Aufspalten es dann basierend auf /, die nicht funktionieren würde. Dann haben Sie einen Fehler mit dem alleinigen ] nach dem split.

Also, um diesen Code zu beheben, hier ist, was Sie tun würden.

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

und dann würde

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

lst2 Druck geben, die Ihre gewünschte Ausgabe ist.


Um zu erklären, ist i in lst in der lst Liste jedes Einzelteil erhalten haben, die Saiten sind. Innerhalb der Schleife wird dann die Zeichenkette i entsprechend der / darin geteilt, die ein anderes Array erzeugt. Aber Sie wollen den letzten Teil dieser Zeichenkette, also das letzte Element im Array, auf das unter Verwendung von [-1] zugegriffen werden kann.

0

Sie können eine Liste Verständnis verwenden:

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

Sie dies mit einem list comprehension erreichen kann.

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 sieht nun wie folgt aus:

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

Neben @Wintro Antwort:

Haben Sie das führende '/' müssen in Ihre Ergebnisse (/file1.zip)? Dann müssen Sie es erneut vorgeben, weil split() es verschwinden lässt.

Ich schlage vor, dass Sie Python builtin pathlib oder os.path.basename oder os.path.split verwenden: https://docs.python.org/3/library/pathlib.htmlhttps://docs.python.org/2/library/os.path.html#os.path.basename

Auch können Sie Schleife Verständnis verwenden:

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

Obwohl es in diesem Fall nicht notwendig sein kann, ist es immer eine gute Idee, die richtige Bibliothek für diese Funktionen zu verwenden. In diesem Fall ist das os Modul:

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