首页 > 解决方案 > 附加模式下的 open() 未按预期运行

问题描述

我正在尝试创建一个程序,询问用户他们想对文件执行什么操作,读取/附加/删除文件。

FileName = open(input("Enter file name: "))
ReadFile = FileName.read()
Decision = input("Do you want to read/delete/append to the file?: ")
if Decision == "read":
    print(ReadFile)
    FileName.close()
elif Decision == "append":
    Append = input("Type what you want to add: ")
    with open("FileName","a") as file:
        file.write(Append)

但是当我检查文件时它没有附加它

标签: python-3.xfileappend

解决方案


发生这种情况是因为您实际上并没有打开同一个文件。您要求用户输入以指定文件的位置以读取该文件,但是如果他们选择“附加”该文件,则您让他们附加到与他们指定的文件无关的文件中。您让用户附加一个名为"FileName". 当用户选择“附加”时,您已将该字符串硬编码为文件的位置。

这里,FileName不是表示文件位置的字符串。这是一个代表文件的对象。

FileName = open(input("Enter file name: "))

您让用户在文件路径中输入了一个字符串,但您没有存储该字符串值。您将该值用于open()文件以供阅读。

在这里,您正在打开一个名为"FileName"python 开始的目录中的文件,因为这里没有可见的路径。

    with open("FileName","a") as file:
        file.write(Append)

去查看你的起始目录,看看你是否创建了一个名为"FileName".

请记住,如果您打开一个文件mode="a",并且该文件不存在,则会创建一个新文件。 https://docs.python.org/3/library/functions.html#open

我还想借此机会向您介绍PEP8,Python 的样式指南。这不是法律,但遵循它会帮助其他 Python 程序员更快地帮助你。

话虽如此,请考虑使您的代码片段看起来更像以下代码:

filename = input("Enter file name: ")
decision = input("Do you want to read/delete/append to the file?: ")
if decision == "read":
    with open(filename) as file:
        print(file.read())

elif decision == "append":
    append = input("Type what you want to add: ")
    with open(filename, "a") as file:
        file.write(append)

推荐阅读