我的程序获取在程序过程中创建的数据,最后用户可以选择是否将此数据导出到.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")
答案 0 :(得分: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
答案 1 :(得分: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")