2017-03-10 107 views
-2

我的程序需要在程序過程中創建的數據,最後用戶可以選擇是否將這些數據導出爲.txt文件。如果爲已存在的FileName輸入一個值,程序應該詢問用戶是否要覆蓋當前的.txt文件。在我的代碼中,如果輸入已存在的值,它將覆蓋此數據而不是跟隨下一行代碼。我看過其他文章說要用「a」來追加,但我不明白這與這個程序有什麼關係。如何停止覆蓋文件?

(臨時文件已經在程序的早期創建,如果用戶選擇導出數據,文件只是重命名,如果用戶不想,它會刪除文件。)

def export(): 
    fileName = input(FileNameText) 
    exist = os.path.isfile(fileName) 
    if exist == True: 
     print("This file name already exists.") 
     while True: 
      try: 
       overWrite = input("Would you like to overwrite the file? Y = yes, N = no\n") 
       if overWrite == "Y": 
        break 
       if overWrite == "N": 
        export() 
       else: 
        invalidInput() 
      except: 
       invalidInput() 
     os.rename("temp.txt",fileName+".txt") 
    if exist == False: 
     os.remove("temp.txt") 
+1

正確縮進你的代碼請 –

+0

如果目標文件已經存在,'os.rename'將會失敗。無論用戶選擇了什麼(無論是否覆蓋),您都需要'shutil.move' –

+1

這個腳本在任何情況下都用os.rename評估這一行。你應該重新思考從頭開始的邏輯 –

回答

2

這應該做的很好:

import os 

while True: 
    filename = input('Provide the file path::\n') 
    if os.path.isfile(filename): 
     overwrite = input('File already exists. Overwrite? Y = yes, N = no\n') 
     if overwrite.lower() == 'y': 
      # call the function that writes the file here. use 'w' on the open handle 
      break 
0

檢查你的執行流程 - 你`break語句向您發送圈外的,並且第一個語句後循環覆蓋文件:

while True: 
     try: 
      overWrite = input("Would you like to overwrite the file? Y = yes, N = no\n") 
      if overWrite == "Y": 
       # this will send you out of the loop 
       # to the point marked "here" 
       break 
      if overWrite == "N": 
       export() 
      else: 
       invalidInput() 
     except: 
      invalidInput() 

    # here 
    os.rename("temp.txt",fileName+".txt")