python - 写入文件的更好方法?

标签 python file

目标:

我有一个名为 airplanes.txt 的文件。它已经包含了一些我最喜欢的飞机:

Boeing 747
Airbus A380

我正在我的主应用程序中进行输入,以便将用户声明的飞机添加到此 airplanes.txt 文件中。

例子: 请输入您要添加到收藏夹列表的飞机名称: <>

如果您现在查看 airplanes.txt 文件,您会看到:

Boeing 747
Airbus A380
Boeing 737

我的问题: 我下面的代码首先获取 airplanes.txt 中的现有数据。

airplane_file = open('airplanes.txt', 'r')

favourite_airplanes = [ line.strip('\n') for line in airplane_file.readlines()]

airplane_file.close()

接下来,我关闭文件,然后接受用户输入。

add_plane = input('Enter The Airplane You Would Like To Add To This List: ')

最后,我写回文件中的所有现有数据,然后将用户输入添加到其中。

if add_plane != None:
    reopened_airplane_file = open('airplanes.txt', 'r+')
    for airplane in favourite_airplanes:
        reopened_airplane_file.write(f'{airplane}\n')
    else:
        reopened_airplane_file.write(f'{add_plane}\n')

我觉得应该有某种方法可以将数据写入包含数据的现有文件,而无需将所有数据重写回其中 + 新数据。

这会变得越来越乏味,因为对于巨大的文件,仅将现有数据写回文件然后写入您希望添加的新数据将花费大量时间。

我试图通过解构我的代码使这个问题尽可能可读,所以我希望你不介意这个长问题。 :)

编辑:

这对我有用:

with open('airplanes.txt', 'a+') as file:
    add_plane = input('Enter The Airplane You Would Like To Add To This List: ')
    file.write(f'{add_plane}\n')

为什么它不起作用: 我使用的是 r+ 模式,这意味着我正在覆盖,尽管 a+ 模式是适合使用的模式! a+ 打开以进行读取和追加(在文件末尾写入)。如果文件不存在,则创建该文件。

最佳答案

您可以以不同的模式打开文件,即读取文件、写入文件或追加文件。这是通过第二个参数“r”、“w”、“a”完成的,对于“字节模式”可选择“+”或“b”。此外,使用 with open(...) 代替。
也就是说,您可以使用:

with open("test.txt", "a+") as file:
    file.write("\nBoeing 737")

关于python - 写入文件的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63208036/

相关文章:

python - 运行使用远程 Webdriver 并连接到 selenium hub 和节点的测试失败

python - 将 QTDesigner 与 PyQT 和 Python 2.6 一起使用

python - Python 2D 热图中的行数增加

c++ - 如何在 C++ 中获取目录中的文件列表?

java - 如何在Java Spring Boot中读取Resources中保存的文件

python - Jupyter Python3 内核安装 - 仅限离线

python - 如何序列化异常

c# - 在 C# 中,如何从域外访问域上的文件共享?

c - 如何将带有指针(也指向什么)的结构保存到文件 - C

linux - 创建 Linux Bash 脚本来复制文件并创建目录