Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

Aus Dateien lesen

Eine Datei ist ein Bytestrom (also eine Folge von einzelnen Bytes wie Perlen auf einer Kette). Er ist mit einem Namen verknüpft und wird vom Betriebssystem im Dateibaum aufgehoben. Programme können beim Betriebssystem Zugriff darauf verlangen, um den Bytestrom zu lesen oder zu verändern. Solche Programme sind z.B. Editoren oder auch der Python-Interpreter, wenn er unsere Scripts liest, um sie abzuarbeiten.
Was andere können, können wir schon lange! Das Bearbeiten von Dateien ist recht einfach, gliedert es sich doch in nur drei Schritte:

  • Öffnen der Datei = dem Betriebssystem sagen, welche Datei man haben will (mit Namen) und was man mit ihr vorhat (lesen, neu schreiben oder verändern). Man bekommt ein Dateiobjekt zurück, das dann im weiteren Verlauf dazu dient, auf die entsprechende Datei zuzugreifen.
  • Bearbeiten der Datei = lesen oder schreiben. Dabei geht man davon aus, dass immer nur an einer einzigen Stelle gearbeitet werden kann. Man kann sich das vorstellen, als ob es dorthin einen Zeiger gäbe. Immer, wenn ein Byte geschrieben oder gelesen wurde, wird der Zeiger automatisch weitergestellt auf das nächste zu schreibende oder zu lesende Byte.
  • Schließen der Datei = Rückspeichern aller Änderungen auf den Datenträger. Das sollte man immer tun; wenn es Probleme gibt, hat man wenigstens den letzten Stand gerettet.

Hinein ins Praktische. Am besten öffnet man zuerst einmal eine Datei zum Lesen. Am Besten eine, die es schon gibt, z.B. diese.

diese = open("dateien1.py", "r")

Das öffnet die Datei "dateien1.py" zum Lesen ("r"ead). Über das Dateiobjekt "diese" kommen wir nun an alles ran. Nun Lesen. Zuerst zeichenweise:

while 1:
    zeichen = diese.read(1)

Aus der Datei ein Byte lesen und in "zeichen" ablegen. Das klappt nur, wenn noch ein Zeichen da war, die Datei also nicht am Ende. Ansonsten hat "zeichen" den Wert "" und der steht für "falsch". Darauf basiert die Abfrage:

    if not zeichen:
        break    # Raus aus der Schleife

andernfalls ausgeben (ohne Zeilenwechsel, deswegen das Komma).

    print zeichen,

Am Schluss noch die Datei schließen.

diese.close()

In Dateien schreiben
Beispiel: Wir fertigen eine Kopie unserer Datei an.

diese = open("dateien1.py", "r")
kopie = open("dateien1.kopie", "w")

Wir öffnen eine zweite Datei mit dem Namen "dateien1.kopie" zum Schreiben ("w"rite). Wenn sie noch nicht existiert, wird sie neu angelegt. Ansonsten wird eine bestehende Datei überschrieben. Nun die gleiche Schleife wie vorher, nur dass nicht auf den Bildschirm (mit print) geschrieben wird, sondern in die neue Datei.

while 1:
    zeichen = diese.read(1)
    if not zeichen:
        break
    kopie.write(zeichen)
diese.close()
kopie.close()
print 'Kopie erstellt. Bitte mit Editor ansehen unter "dateien1.kopie"'

Einige Bemerkungen:

  • "read" liest soviele Bytes, wie angegeben (sofern vorhanden). Gibt es nicht mehr soviele, kriegt man halt, was noch da ist. Wird der Parameter ganz weggelassen, versucht der Interpreter, die ganze Datei in eine einzige Zeichenkette zu lesen, was insbesondere bei langen Dateien überhaupt nicht empfehlenswert ist. Mit "read" werden übrigens auch Zeilenwechselzeichen gelesen und wie normale ASCII-Zeichen behandelt.
  • "write" muss man nicht sagen, wieviel es schreiben soll. Es bekommt eine Zeichenkette und die schreibt es, egal wie lang. Dass unsere Zeichenkette "zeichen" hieß und von daher den Eindruck eines einzelnen Zeichen machte, hat der Interpreter offenbar nicht verstanden. "write" kann nur Zeichenketten schreiben. Andere Datenobjekte müssen erst in solche gewandelt werden.

Example: OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect: ''

python manage.py migrate python manage.py makemigrations python manage.py migrate

Tags:

Misc Example

Related

Ich will gerne ein Spiel programmieren, also zumindest will ich es versuchen und dafür fange ich mit PyGame an.

Jetzt habe ich aber schon mein erstes Problem:

Und zwar schreibe ich Python-Code, aber der wird ja nicht ausgeführt, weil die Bibliothek PyGame nicht installiert ist. Ich habe zwar diese whl-Datei, weiß aber nicht, was ich damit anfangen soll.

Kann mir da eventuell jemand helfen? Ich habe auch schon YouTube-Videos geschaut, aber irgendwie funktioniert es nicht wirklich.

Ich würde mich über eine Antwort freuen! Danke.

  • Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
  • Forum
  • szeneBOX Community
  • Daily Talk & Offtopic
  • Python3 Script für Khinsider.com

  1. 09.05.2022, 15:43 #1

    Python3 Script für Khinsider.com

    Hey,

    kennt sich da jemand aus:

    https://github.com/trash/khinsider-mp3-downloader

    Fehler: SyntaxError: invalid syntax

    thx


  2. Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

  3. 09.05.2022, 21:41 #2

    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

    DataHoarder

    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch


    da scheint was mit deiner lokalen python Umgebung nicht korrekt zu sein.
    Wie führst du das script denn aus?

    Mit `python3 downloader.py` funktioniert das bei mir unter Python 3.9.10 ohne Probleme. Mehr ist da eigentlich nicht nötig.

    Vermutlich startest du das script mit `./downloader.py`, da im Script aber kein Shebang angegeben ist schlägt das fehl (bei mir auch).
    Entweder du startest das Script dann explizit mit `python3` oder du fügst folgende Shebang in die erste Zeile des Scripts ein: `#!/usr/bin/env python3`.

    Wenn das ebenfalls nicht funktioniert ist wie erwähnt was mit deiner lokalen Python Umgebung nicht korrekt. Was zeigt dir `which python` oder `type -a python` an?

    Geändert von rasta (09.05.2022 um 21:51 Uhr)


  4. Diesen Mitgliedern gefällt dieser Beitrag:


  5. 10.05.2022, 16:50 #3

    das ist das erste mal, dass ich dies verwende.
    Kenn mich da überhaupt nicht aus.

    Ich muss mit "IDLE (Python 3.10 64-bit)"

    das script starten oder?

    File-Open-downloader.py-Run

    da kommt: from bs4 import BeautifulSoup
    ModuleNotFoundError: No module named 'bs4'

    edit: habs hinbekommen

    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

    - - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

    Was ich derzeit bekomme:

    OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch:

    Kann man das irgendwie beheben?

    Geändert von Obi-LAN Kenobie (09.05.2022 um 23:43 Uhr)


  6. Diesen Mitgliedern gefällt dieser Beitrag:


  7. 11.05.2022, 12:33 #4

    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

    Anfänger

    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch


    versuch mal in downloader.py Zeile 76
    file_on_disk_path = dir_name + '/' + file_name
    ... durch ....
    file_on_disk_path = dir_name + '\\' + file_name
    .... zu ersetzen


  8. Diesen Mitgliedern gefällt dieser Beitrag:


  9. 11.05.2022, 14:01 #5

    Traceback (most recent call last):
    File "F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py", line 98, in <module>
    fetch_from_url(line)
    File "F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py", line 30, in fetch_from_url
    os.makedirs(dir_name)
    File "C:\Users\Asus\AppData\Local\Programs\Python\Pytho n310\lib\os.py", line 225, in makedirs
    mkdir(name, mode)
    OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'downloads/o-chan-no-oekaki-logic-1995-saturn-gamerip\n'


  10. 11.05.2022, 16:02 #6

    Gern den Traceback immer gleich mitliefern, dann hätte readabook nicht falsch geraten, wo man ansetzen muss.

    Neuer Versuch:

    Code:

    downloader.py Ersetze Zeile 96: file = open(input_file_name, 'r') mit file = open(input_file_name, 'r').read().splitlines()


  11. Diesen Mitgliedern gefällt dieser Beitrag:


  12. 11.05.2022, 17:31 #7

    Er startet nun, es kommt aber trotzdem noch folgendes:

    Warning (from warnings module):
    File "F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py", line 34
    soup = BeautifulSoup(urllib2.urlopen(url))
    GuessedAtParserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

    The code that caused this warning is on line 34 of the file F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py. To get rid of this warning, pass the additional argument 'features="html.parser"' to the BeautifulSoup constructor.

    [info] 13 links acquired

    Warning (from warnings module):
    File "F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py", line 62
    link_soup = BeautifulSoup(urllib2.urlopen(href))
    GuessedAtParserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

    The code that caused this warning is on line 62 of the file F:\- Musik ( Soundtrack - Movies-Series-Games )\- unbearbeitet\- Khinsider\- - - Script\khinsider-mp3-downloader-master\downloader.py. To get rid of this warning, pass the additional argument 'features="html.parser"' to the BeautifulSoup constructor.


  13. 11.05.2022, 18:19 #8

    Die Meldung solltest du ignorieren können.

    Du kannst es aber dennoch korrigieren:
    34 soup = BeautifulSoup(urllib2.urlopen(url)) -> soup = BeautifulSoup(urllib2.urlopen(url), 'html.parser')
    62 link_soup = BeautifulSoup(urllib2.urlopen(href)) -> link_soup = BeautifulSoup(urllib2.urlopen(href), 'html.parser')

    Optimalerweise antwortest du noch auf die "Issues" bei Github mit den entsprechenden Lösungen aus diesem Thread.


  14. Diesen Mitgliedern gefällt dieser Beitrag:


  15. 11.05.2022, 19:02 #9

    funktioniert nun
    Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

    danke


  16. Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

Ähnliche Themen

  1. Antworten: 6

    Letzter Beitrag: 01.01.2019, 01:15

  2. Antworten: 7

    Letzter Beitrag: 11.12.2018, 16:05

  3. Antworten: 6

    Letzter Beitrag: 15.10.2018, 13:04

  4. Antworten: 1

    Letzter Beitrag: 12.01.2018, 19:19

  5. Antworten: 1

    Letzter Beitrag: 09.08.2016, 19:11

Python Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

  • BB-Code ist an.
  • Smileys sind an.
  • [IMG] Code ist an.
  • [VIDEO] Code ist an.
  • HTML-Code ist aus.

Foren-Regeln