python
  • file
  • 2017-04-09 5 views 0 likes 
    0

    Ich möchte eine Protokolldatei mit dem aktuellen Datum im Namen der Datei enthalten und dann Daten an die Protokolldatei senden.Python-Datei nicht öffnen [FileNotFoundError:]

    import time 
    
    current_date = str(time.strftime("%d/%m")) 
    
    data = 'test data' 
    
    log = open(current_date+"log.txt","a") 
    log.write("> "+data+"\n") 
    log.close() 
    

    Wenn er gestartet wird, führt dies zu dem folgenden Fehler:

    'FileNotFoundError: [Errno 2] No such file or directory: '09/04log.txt' 
    

    Wie kann ich dieses Problem beheben?

    +3

    nicht 'verwenden /' in Ihrem Dateinamen. '09/04log.txt' ist die Datei' 04log.txt' im Verzeichnis '09', die wahrscheinlich nicht existiert. Ändern Sie einfach Ihr Datumsformat. –

    +0

    Übrigens gibt 'time.strftime' bereits einen String zurück –

    Antwort

    0

    es wegen der umgekehrten Schrägstrich in current_date ist Das Ergebnis a/b sein wird, die Python sagt, dass a ein Verzeichnis ist und b ist Datei so das Endergebnis 01/01log.txt sein wird, die auf 01log.txt verweist Datei unter 01 Verzeichnis.

    0

    Sie müssen die Datei erstellen, wenn sie nicht existiert. Außerdem dürfen Dateinamen keine Schrägstriche enthalten, sodass Sie versuchen, sie aus einem Verzeichnis zu öffnen, das wahrscheinlich nicht existiert.

    Benennen Sie die Datei besser und verwenden a+ Modus

    +0

    Ich habe das schon versucht, Noch ein [Errno 2] Keine solche Datei oder kein Verzeichnis: '09 /04log.txt ' – montymagic9

    +0

    Siehe aktualisierte Antwort –

    0

    Es schlägt fehl, da Sie eine Datei in einem nicht vorhandenen Verzeichnis zu erstellen versuchen, und das ist verboten. Sie sollten den Ordner erstellen zuerst:

    try: 
        os.mkdir(os.path.dirname(current_date)) 
    except OSError as e: 
        if e.errno == 17: 
        # directory already exists 
        pass 
        else: 
        raise 
    
    0

    Wenn Sie darin einen neuen Ordner mit der Datei erstellen:

    Der Ordner muss vorher existieren, wenn open() verwendet.

    import time,os 
    
    def foo(): 
        try: 
         current_date = str(time.strftime("%d/%m")) 
         data = 'test data' 
         log = open(current_date+"log.txt","w") 
         log.write("> "+data+"\n") 
         log.close() 
        except FileNotFoundError: # If there is no folder... 
         os.mkdir(os.path.dirname(current_date)) 
         foo() 
    

    Wenn Sie nur / in einem Dateinamen

    verwenden möchten, die nicht erlaubt ist, kann man das nicht tun. Andere Symbole, die Sie nicht verwenden können, sind:

    • \
    • |
    • *
    • ?
    • "
    • <
    • >

    Auch wenn Sie versuchen, eine Datei manuell mit einem dieser Zeichen zu nennen, und Sie werden feststellen, dass Sie nicht:

    Image

    In diesem Fall ist es nicht erlaubt weil es so ist, als würde man "an die .txt-Datei in diesem Ordner anhängen". Und es gibt keinen Ordner, du kannst es nicht tun.


    Exkurs: Ich würde die with Anweisung verwenden, und verwenden Sie auch current_date = time.strftime("%d/%m") wie es immer ein String ist

    Verwandte Themen