python - 如何循环浏览 .txt 文件中的行,在其中找到一个字符串,然后替换一个单词?
问题描述
我在 .txt 文件中有一个车辆数据库。每辆车都在一个单独的行中,有一个 ID,并且可以是“活动的”或“不活动的”。
我正在编写函数“change_status()”。该函数将接收一个输入(ID),在 .txt 文件中循环查找具有该 ID 的行,然后将单词“active”替换为单词“inactive”,或者将单词“inactive”替换为单词“积极的”。
我的功能中的一切都在工作,除了一件事。我不知道如何覆盖现有行(我正在阅读的行),而不仅仅是在 txt 文件底部写一个状态更改的新行,这就是我得到的。
def change_status():
id_to_change = input("Insert the ID of the Vehicle which you want to deactivate/activate: ")
with open("Vehicles.txt", "r+") as file:
lines = file.readlines()
for line in lines:
if id_to_change in line:
if "active" in line:
new_line = line.replace("active", "inactive")
file.write(new_line)
else:
new_line = line.replace("inactive", "active")
file.write(new_line)
else:
pass
print("VEHICLE STATUS SUCCESSFULLY CHANGED")
解决方案
最简单(尽管显然不是最有效)的解决方案是重写整个文件。else
打开一个不同的文件进行输出,如果没有匹配,则写入未修改的行,而不是传入块。正如 Thomas Weller 指出的那样,就地编辑文件不是文件系统直接支持的操作,因此您需要更多逻辑来执行其他任何操作。
推荐阅读
- javascript - 在移动设备上水平滚动页面和加速
- python-3.x - 无法使用核心 tensorflow api 为张量“Placeholder_1:0”提供形状 (242,) 的值
- xamarin.android - 如何在 Visual Studio 2019 中定位 Android 4.1?
- ios - 获取 imagePaths 的所有资产
- javascript - 向站点添加了一些代码,它可以正常工作,但似乎无限滚动到页脚之外
- php - 使用 POSTMAN 测试 Laravel API 路由
- c# - 如何在 C# 中使用 Process.Start 传递 argv[0]
- c# - 具有相同类和相同类列表的 C# 泛型
- rust - 如何在 Rust 中获取进位标志的值
- jquery - 从远程 url 使用 JSON 创建 Dyantable