2016-07-10 7 views
0

Wie kann ich den Benutzer nach einem Dateinamen fragen und wenn es bereits existiert, fragen Sie den Benutzer, ob sie es überschreiben wollen oder nicht, und befolgen Sie ihre Anfrage. Wenn die Datei nicht existiert, sollte eine neue Datei (mit dem ausgewählten Namen) erstellt werden. Von einigen Recherchen sowohl auf die Python-Website und Stack-Überlauf, ich habeErstellen von Dateischleife

try: 
    with open(input("Please enter a suitable file name")) as file: 
     print("This filename already exists") 

except IOError: 
    my_file = open("output.txt", "r+") 

mit diesem Code kommt Aber das wird in Python nicht ausgeführt, und tue nicht alles, was ich will es tun.

+0

Haben Sie ein ')' direkt vor 'als Datei' vergessen? –

+0

Welchen Fehler zeigt es? –

+0

Sind Sie besorgt über die Race Conditions, um das Vorhandensein von Dateien zu überprüfen? – sberry

Antwort

1

Alternative soltution wäre (aber der Benutzer einen vollständigen Pfad schaffen, müssten):

import os 

def func(): 
    if os.path.exists(input("Enter name: ")): 
     if input("File already exists. Overwrite it? (y/n) ")[0] == 'y': 
      my_file = open("filename.txt", 'w+') 
     else: 
      func() 

    else: 
    my_file = open("filename.txt", 'w+') 

Vergessen Sie nicht, die Datei-Objekt zu schließen, wenn es nicht mehr mit my_file.close() benötigt wird.

+0

Hallo Ich habe versucht, Ihre Lösung in einer separaten Python-Datei nur für sich selbst und der folgende Fehler kam auf Traceback (letzte Anruf zuletzt): Zeile 6, in my_file = öffnen ("filename.txt", "r +") FileNotFoundError: [Errno 2] Keine solche Datei oder Verzeichnis: 'filename.txt' – Ollie

+0

Sie sollten '' w + 'anstelle von' verwenden 'r +' ', bearbeitet. – sxnwlfkk

+0

Ich habe das geändert, und jetzt erscheint dieser Fehler my_file = open ("filename.txt", "r +") FileNotFoundError: [Errno 2] Keine solche Datei oder Verzeichnis: 'filename.txt' – Ollie

1

Sie können os.path.exists verwenden, um zu überprüfen, ob eine Datei bereits existiert.

if os.path.exists(file path): 
    q = input("Do you want to overwrite the existing file? ") 
    if q == (your accepted answer): 
     #stuff 
else: 
    #stuff 

Man könnte dies mit einem Try/außer wenn Sie von dem ganzen „leichter zu bitten um Vergebung“ Motto zu halten, aber ich denke, das sauberer ist.

+0

Was schreiben Sie in den (Dateipfad)? – Ollie

+0

Ist 'os.path.isfile' keine bessere Wahl, da OP nach regulären Dateien suchen möchte? – SilentMonk

+0

Sie könnten dies als eine Option tun 'file_path = input (" Geben Sie den Dateipfad an ")' – Pythonista