@__deets__: So wie ich es jetzt verstanden habe, wird ein Pfad zur URL, wenn er mehr als Verzeichnisnamen und Dateinamen enthält.
Gruß
Atalanttore
Download-Skript von Python 2 auf Python 3 portieren
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
@__deets__: Mit "Verzeichnis hoch" meinst du den Befehl oder etwas anderes?
Nach weiterer Suche bin ich nun auf eine Funktion zur Extraktion des Dateinamens aus einer URL gestoßen.
Ich habe den Code der Funktion auf das Wesentliche gekürzt:
Ist diese Funktion ein besserer Ansatz als nur `os.path.basename()` dafür zu verwenden?
Gruß
Atalanttore
Nach weiterer Suche bin ich nun auf eine Funktion zur Extraktion des Dateinamens aus einer URL gestoßen.
Ich habe den Code der Funktion auf das Wesentliche gekürzt:
Code: Alles auswählen
def url2filename(url):
"""
Return basename corresponding to url.
Based on https://gist.github.com/zed/c2168b9c52b032b5fb7d
"""
url_path = urllib.parse.urlsplit(url).path
basename = posixpath.basename(urllib.parse.unquote(url_path))
if (os.path.basename(basename) != basename or urllib.parse.unquote(posixpath.basename(url_path)) != basename):
raise ValueError # reject '%2f' or 'dir%5Cbasename.ext' on Windows
return basename
Gruß
Atalanttore
Nein. Ich meine “../../..”. Das sind immer Pfade. In der Funktion ist mir zu oft unquote aufgerufen, mach das EINMAL am Anfang. Und da man weiß, das URLs den / zur Trennung der Komponenten nutzen, würde ich auch das als simples split Argument benutzten. Da posixpath zu nutzen nur weil das zufällig den gleichen Trenner hat ist nicht wirklich besser als das os.path Modul.
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
@__deets__: Ich habe den Code nach deinen Empfehlungen, sofern ich alles richtig verstanden habe, und noch ein wenig mehr umgebaut. Auf reguläre Ausdrücke habe ich verzichtet.
Code:
Gruß
Atalanttore
Code:
Code: Alles auswählen
import fnmatch
import urllib.parse
URL = "https://apod.nasa.gov/image/1906/gendlerM83-New-HST-ESO-LL.jpg"
def get_basename(url, file_extension):
"""Return basename corresponding to url."""
url_path = urllib.parse.urlsplit(url).path
unquoted_url= urllib.parse.unquote(url_path)
basename = unquoted_url.split("/")[-1]
if not fnmatch.fnmatch(basename, f"*.{file_extension}"):
raise ValueError
return basename
print(get_basename(URL, 'jpg'))
Gruß
Atalanttore