首页 > 解决方案 > 写入文件的更好方法?

问题描述

目标:

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

Boeing 747
Airbus A380

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

示例: Please type the name of the plane you want to add to your favourites list: <<波音 737>>

如果您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+打开以供读取和附加(在文件末尾写入)。如果文件不存在,则创建该文件。

标签: pythonfile

解决方案


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

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

推荐阅读