Python IOError-Ausnahme beim Erstellen einer langen Datei

8

Beim Versuch, eine neue Datei mit "open (fname, 'w +')" zu öffnen, erhalte ich einen IOError. Die vollständige Fehlermeldung ist unten.

Die Datei existiert nicht, aber ich habe mit "os.access (dir_name, os.W_OK)" und "os.path.exists (dir_name)" verifiziert, dass das übergeordnete Verzeichnis für die Datei existiert.

Ich frage mich, ob der Dateiname für Windows einfach zu lang ist oder ob ich etwas falsch mache. Irgendwelche Tipps würden geschätzt. Vielen Dank.

Fehlermeldung:

  

IOError: [Errno 2] Keine solche Datei oder kein Verzeichnis: 'C: \ Dokumente und   Einstellungen \ Administrator \ op_models \ Corp_Network_Nov12 \ abcde_corporate_nov_12.project \ abcde_corporate_nov_12-ctr.rptd.dir \ ctr \ Non   Geschäftszeiten für   Weeknights \ stundy_data_for_2_weeks \ 1294897740 \ json.data \ Link \ 0 \ Link   Auslastung \ analysator393146160-data0.js

    
AshD 13.01.2011, 05:58
quelle

4 Antworten

7

In der Windows-API ist die maximale Pfadlänge auf 260 Zeichen begrenzt.

Ссылка

Update: "\\? \" dem Pfad voranstellen.

    
cgohlke 13.01.2011 06:07
quelle
4

Sie können das Tarfile-Modul mit dem folgenden Patch versehen:

%Vor%     
ticapix 18.10.2013 08:43
quelle
3

Hier ist ein Code, der für mich funktioniert (ich habe sehr lange Dateinamen und Pfade):

%Vor%

Beachten Sie, dass es für mich nur mit einer Kombination aus allem Folgendem funktioniert:

  1. Stellen Sie '\\? \' an der Vorderseite voran.

  2. Verwenden Sie den vollständigen Pfad und nicht den relativen Pfad.

  3. Verwenden Sie nur umgekehrte Schrägstriche.

  4. In Python muss die Dateinamenszeichenfolge eine Unicode-Zeichenfolge sein, z. B. u "abc", nicht "abc".

Beachten Sie auch, dass os.walk(..) aus irgendeinem Grund einige Verzeichnisse als Dateien zurückgab, also sehe ich oben nach.

    
Evgeni Sergeev 04.11.2012 04:02
quelle
0

Wenn es nicht die Länge des Dateinamens ist, ist es der Inhalt des Dateinamens ...

Python behandelt '\ 12' als Kontrollsequenz.

%Vor%

Die Verwendung roher Zeichenketten für Windows-Dateinamen hilft:

%Vor%

Aktualisieren

Alternativ können Sie Schrägstriche '/' anstelle von umgekehrten Schrägstrichen '\' verwenden, da diese auf allen Betriebssystemen funktionieren und Sie Ärger mit Backslashes direkt am Ende eines Pfadnamens wie in Ihren Kommentaren speichern.

Siehe auch os.path.join() .

Update 2

Vereinfachte Demonstration des Problems:

%Vor%     
Johnsyweb 13.01.2011 06:11
quelle

Tags und Links