2016-04-28 12 views
1

Hier ist mein Code, ich könnte Ihre Hilfe verwenden.Lesen, Schreiben, Anhängen und Löschen von Dateien in Python

Mein Programm soll Dateneingabe akzeptieren, neue Textdateien erstellen, Textdateien lesen und schreiben, Text an bereits vorhandene Textdateien anhängen, Dateien abschneiden und löschen. Jetzt ist das Problem, das ich mit meinem Programm habe, dass der Teil des Codes, der Text anhängen soll, den Inhalt einer Textdatei abschneiden und eine Textdatei löschen, nicht funktioniert und das Programm keine Fehler während der Laufzeit zurückgibt .

import os 
from sys import argv 

filename = argv 

def menu(): 
    holder = input("enter 1 to create new file or 2 to use existing ones\n") 
    if holder == 1: 
     dam = raw_input("Enter name of new text file:\n")+'.txt' 
     textfile = open(dam, 'w+') 
     happ = raw_input("\nPlease enter record into your new file\n\n") 
     textfile.write(happ) 
     textfile.close() 
     print "*******************" 
     print "*******************\n" 

     print "To view the content of your new file, enter 'yes' otherwise enter 'no' to exit" 

     gett = raw_input() 

     if gett == 'yes': 

      print "*******************" 
      print "\nyour inputted record is>>>\n" 
      display = open(dam) 
      print(display.read()) 
      print'\n' 
      menu() 
     elif gett == 'no': 
      print ("\nOk, see you later. Have a nice day!") 
      print'\n' 
      menu() 
     else: 
      print "\nyou have entered a wrong input" 
      print '\n' 
      menu() 
    elif holder == 2: 
     filename = raw_input("Enter name of file:\n")+'.txt' 
     entry = raw_input("Press 7 to append text into this file, 8 to truncate the content of this file, or 9 to delete this file : ") 
     if entry == 7: 
      print ("Displayed below is the content of your file, continue to append more text at the bottom of the file.(text is limited to 3 lines)\n") 
      textfiles = open(filename, 'a+') 
      print (textfiles.read()) 
      line1 = raw_input() 
      line2 = raw_input() 
      line3 = raw_input() 
      print "\nSaving..." 
      textfiles.write(line1) 
      textfiles.write('\n') 
      textfiles.write(line2) 
      textfiles.write('\n') 
      textfiles.write(line3) 
      textfiles.write('\n') 
      print "\nSaved!" 
      textfiles.close() 
     elif entry == 8: 
      textfiles = open(filename, 'w') 
      print "Truncating the file..." 
      textfiles.truncate() 
      print "Done, truncated." 
      textfiles.close() 
      right = raw_input("Do you want to write into this file? Y/N : ") 
      if right == 'Y': 
       textfiles = open(filename, 'a+') 
       print "text is limited to 3 lines" 
       line1 = raw_input('\n') 
       line2 = raw_input() 
       line3 = raw_input() 
       print "\nSaving..." 
       textfiles.write(line1) 
       textfiles.write('\n') 
       textfiles.write(line2) 
       textfiles.write('\n') 
       textfiles.write(line3) 
       textfiles.write('\n') 
       print "\nSaved!" 
       textfiles.close() 
      else: 
       print "Ok have a nice day" 
     elif entry == 9: 
      print "Deleting the file..." 
      try: 
       os.remove(filename) 
      except OSError, e: #if failed, report it back to the user 
       print ("Error: %s - %s." % (e.filename, e.strerror)) 
       print "Done, deleted." 
     else: 
      print "Error! wrong entry" 
      print '\n' 
      menu() 
    else: 
     print "\nyou have entered a wrong input" 
     print '\n' 
     menu() 
menu() 

Dies ist die Ausgabe, die es

1 eingeben, um neue Datei oder 2

Geben Sie den Namen der Datei zu verwenden bestehende gibt:

Test

Drücken Sie 7, um Text in diese Datei einzufügen, 8, um den Inhalt von th zu kürzen ist Datei oder 9 um diese Datei zu löschen: 8

Fehler! falsche Eingabe

eingeben 1 neue Datei oder 2 erstellen bestehende

Jede Hilfe zu verwenden, wie diese Arbeit zu machen?

+1

Sie müssen 'entry' zu einem' int' vor Ihrem conditionals konvertieren, da sonst die Vergleiche werden nie passieren. Alternativ, wenn Ihre Bedingungen etwas wie "if entry == '7':" wären, würde das auch funktionieren. – JCVanHamme

+0

sys und argv werden nicht benötigt. Wenn Sie den Dateinamen wirklich aus der Liste der Argumente lesen möchten, müssen Sie folgendes verwenden: 'filename = argv [1]'. Siehe: https://docs.python.org/3.5/library/sys.html –

+0

danke JCVanHamme, aber es funktioniert im Falle des Halters, warum kann es dann nicht für die Eingabe arbeiten? – ebi

Antwort

0

Sie die Funktion raw_input() für Ihre Variable entry an der Linie

entry = raw_input("Press 7 to append text into this file, 8 to truncate the content of this file, or 9 to delete this file : ") 

verweis in die Dokumentation von python2 (https://docs.python.org/2/library/functions.html#raw_input) verwenden, raw_input die Funktion ein String zurück.

Danach testen Sie Ihre Variable entry gegen integer Werte. Da ein String niemals gleich int ist, wird der Test nicht funktionieren. Und Ihr Code fallen in den letzten Zustand Block, die „falsche Eingabe“

um dieses Problem zu beheben, sollten Sie die input Funktion verwenden, wie Sie am Anfang Ihres Codes haben (https://docs.python.org/2/library/functions.html#input):

entry = input("Press 7 to append text into this file, 8 to truncate the content of this file, or 9 to delete this file : ") 

oder Guss entry zu int

entry = int(raw_input("Press 7 to append text into this file, 8 to truncate the content of this file, or 9 to delete this file : ")) 
Verwandte Themen