python - 写入文件的更好方法?
问题描述
目标:
我有一个名为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+
打开以供读取和附加(在文件末尾写入)。如果文件不存在,则创建该文件。
解决方案
您可以以不同的模式打开文件,即读取文件、写入文件或追加文件。这是通过第二个参数“r”、“w”、“a”完成的,“字节模式”可选用“+”或“b”。此外,请with open(...)
改用。
也就是说,您可以使用:
with open("test.txt", "a+") as file:
file.write("\nBoeing 737")
推荐阅读
- javascript - 如何在 HTML5 画布上绘制 Javascript 修改的 SVG 对象?
- algorithm - 快速增加和减慢达到预定义最大值的功能
- python - 如果数据库中不存在项目,如何在解析上传的 csv 文件后重定向到表单?
- python-3.x - 文件处理程序的动态文件名
- node.js - 如何在 Firebase 控制台上部署 ionic 4 应用程序?
- excel - 使用批处理脚本从 excel 转换为 csv 时出现错误的日期格式
- python - Plotly 无法正确显示 y 轴标签
- javascript - 如何使用 superagent 发送 FormData 对象
- css - 你怎么把div放在右边
- google-app-engine - 请求处理过程中的 App Engine 延迟