Fehler beim Erstellen einer neuen Textdatei mit Python?


68

Diese Funktion funktioniert nicht und löst einen Fehler aus. Muss ich Argumente oder Parameter ändern?

import sys

def write():
    print('Creating new text file') 

    name = input('Enter name of text file: ')+'.txt'  # Name of text file coerced with +.txt

    try:
        file = open(name,'r+')   # Trying to create a new file or open one
        file.close()

    except:
        print('Something went wrong! Can\'t tell what?')
        sys.exit(0) # quit Python

write()

Geben Sie beim Schreiben einer Frage immer an, was nicht funktioniert. Gibt es einen Syntaxfehler? Stürzt es ab? Tut es etwas, aber nicht das, was Sie beabsichtigt haben? Geben Sie uns im Idealfall das erwartete Ergebnis und das tatsächliche Ergebnis. "Funktioniert nicht" ist zu vage.
Chepper

15
Beseitigen Sie diesen schädlichen Block "Ausnahmebehandlung", der Sie nur daran hindert, genau zu wissen, was schief gelaufen ist.
Bruno Desthuilliers

+1 @brunodesthuilliers! Was er meint ist, nicht so generisch zu schreiben, außer Blöcke. Wenn Sie sich nicht sicher sind, was Ausnahmen sind, entfernen Sie die Ausnahmebehandlung und testen Sie, Sie werden zumindest wissen, was falsch läuft.
0xc0de

1
Was macht open () aus Neugier überhaupt? Ich habe die Antworten unten gelesen und es zum Laufen gebracht, obwohl ich mich für 'a +' anstelle von 'r +' entschieden habe, nur weil ich eine Anwendung zur Aufzeichnung von Aufzeichnungen im Auge habe. Aber wie füge ich jetzt, da es funktioniert, Daten an? Und wo genau ist die Datei, die ich erstelle? --- Um anzugeben, was "Arbeiten" bedeutet, erhalte ich als Ausgabe die folgende Zeile:<_io.TextIOWrapper name='hello' mode='a+' encoding='cp1252'>
Musixauce3000

Antworten:


114

Wenn die Datei nicht vorhanden ist, schlägt dies open(name,'r+')fehl.

Sie können verwenden open(name, 'w'), wodurch die Datei erstellt wird, wenn die Datei nicht vorhanden ist, die vorhandene Datei jedoch abgeschnitten wird.

Alternativ können Sie verwenden open(name, 'a'); Dadurch wird die Datei erstellt, wenn die Datei nicht vorhanden ist, die vorhandene Datei jedoch nicht abgeschnitten.


3
Weder "w" noch "a" erstellen eine neue Datei für mich.
KI4JGT

Dumm, dass ich das Verzeichnis Desktop nicht in meinen Pfad eingefügt habe, also saß ich da und vermisste einen Teil des Dateipfads. . .
KI4JGT

1
Um zu vermeiden, dass eine vorhandene Datei 'x'geändert wird, kann anstelle von 'w', 'a'.
JFS

6

Anstatt Try-Except-Blöcke zu verwenden, können Sie auch andere Blöcke verwenden

Dies wird nicht ausgeführt, wenn die Datei nicht vorhanden und geöffnet ist (Name, 'r +').

if os.path.exists('location\filename.txt'):
    print "File exists"

else:
   open("location\filename.txt", 'w')

'w' erstellt eine Datei, wenn sie nicht vorhanden ist


6

Das folgende Skript wird verwendet, um jede Art von Datei mit Benutzereingaben als Erweiterung zu erstellen

import sys
def create():
    print("creating new  file")
    name=raw_input ("enter the name of file:")
    extension=raw_input ("enter extension of file:")
    try:
        name=name+"."+extension
        file=open(name,'a')

        file.close()
    except:
            print("error occured")
            sys.exit(0)

create()

Vielen Dank für Ihre Antwort, funktioniert aber leider nicht für mich, da "Fehler aufgetreten" ist !!
McLan

PEP nicht folgen. Andere Einrückungen verwenden. Ausnahme falsch behandelt.
Desprit

3

Das funktioniert gut, aber stattdessen

name = input('Enter name of text file: ')+'.txt' 

du solltest benutzen

name = raw_input('Enter name of text file: ')+'.txt'

zusammen mit

open(name,'a') or open(name,'w')

7
Die Frage ist markiert, python-3.xin denen raw_inputnicht verfügbar ist.
Falsetru

10
Tag python-3.xwurde nach dieser Antwort hinzugefügt
Adrian Krupa

1
import sys

def write():
    print('Creating new text file') 

    name = raw_input('Enter name of text file: ')+'.txt'  # Name of text file coerced with +.txt

    try:
        file = open(name,'a')   # Trying to create a new file or open one
        file.close()

    except:
        print('Something went wrong! Can\'t tell what?')
        sys.exit(0) # quit Python

write()

das wird vielversprechend funktionieren :)


1
Fügt dies etwas hinzu, das in den obigen 2 Jahre alten Antworten noch nicht vorhanden war?
Benutzer

Er wechselte name=input()zu name=raw_input(). Das ist natürlich veraltet.
Musixauce3000

1

Sie können der Einfachheit halber die Funktion os.system verwenden:

import os
os.system("touch filename.extension")

Dies ruft das Systemterminal auf, um die Aufgabe auszuführen.


7
Eines der besten Dinge an Python ist, dass die stdlib betriebssystemspezifische Dienstprogrammaufrufe wie touch abstrahiert ... am besten, um so etwas um jeden Preis zu vermeiden
f0ster

0

Sie können verwenden open(name, 'a')

Wenn Sie jedoch einen Dateinamen eingeben, verwenden Sie auf beiden Seiten Anführungszeichen, da ".txt"dies sonst nicht zum Dateinamen hinzugefügt werden kann


2
es sieht so aus, als ob die vorherige Antwort bereits offen erwähnt wurde (Name, 'a'), daher wäre es besser gewesen, nur Ihre letzte Zeile als Kommentar
hinzuzufügen

5
"Anführungszeichen"? Meinen Sie einfache Anführungszeichen ? Python ist es egal, ob Sie eine Zeichenfolge in einfache oder doppelte Anführungszeichen setzen. Es ist nur wichtig, ob die Zeichenfolge ein übereinstimmendes Trennzeichen enthält. Wenn Sie es in die andere Art einschließen, müssen Sie sich dem eingeschlossenen Zeichen entziehen.
Tom Zych
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.