如何停止覆盖文件?

时间:2017-03-10 12:54:26

标签: python python-3.5

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

2 个答案:

答案 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")