Dov*_*iin 6 python file in-place
如果已经有人问过类似的问题,我深表歉意——我确实搜索了一些东西,我可能错过了一些东西,但至少在我看来,其他问题的答案并不是我想做的事情。
我有一个包含以下信息的文本文件(我们称之为“Potatoes.txt”):
Town 1,300,
Town 2,205,
Town 3,600,
Town 4,910,
Town 5,360,
Run Code Online (Sandbox Code Playgroud)
我想做的是减少某些城镇的数量,并相应地修改文本文件。我做了一些研究,看起来你不能修改文本文件,我需要文本文件具有相同的名称,只是里面有不同的值,所以我目前正在这样做:
f = open("ModifiedPotatoes.txt","w")
f.close()
with open("Potatoes.txt","r") as file:
for line in file:
info = line.split(",")
if "Town 2" or "Town 4" in line:
info[1] -= 20
with open("ModifiedPotatoes.txt","a"):
infoStr = "\n" + ",".join(str(x) for x in info)
file.write(infoStr)
f = open("Potatoes.txt","w")
f.close()
with open("ModifedPotatoes.txt","r") as file:
for line in file:
with open("Potatoes.txt","a") as potatoesFile:
potatoesFile.write(line)
Run Code Online (Sandbox Code Playgroud)
所以基本上我只是将旧文件覆盖为空白文件,然后从修改后的/临时文件中复制值。有没有更好的方法来做到这一点我想念的?
谢谢您的帮助。
我做了一些研究,看来你不能修改文本文件
有一个模块可以在循环时为您提供与修改文本相同的效果。尝试使用的FileInput与模块就地设置选项真。
这里有一些 Python3.6 代码可以帮助您入门:
from fileinput import FileInput
with FileInput(files=['Potatoes.txt'], inplace=True) as f:
for line in f:
line = line.rstrip()
info = line.split(",")
if "Town 2" in line or "Town 4" in line:
info[1] = int(info[1]) - 20
line = ",".join(str(x) for x in info))
print(line)
Run Code Online (Sandbox Code Playgroud)
尝试:
mod_lines = []
with open("Potatoes.txt", "r") as f:
for line in f:
info = line.split(",")
if info[0] in ("Town 2", "Town 4"):
info[1] = int(info[1]) - 20
mod_lines.append(info)
with open("Potatoes.txt", "w") as f:
for m in mod_lines:
f.write(",".join([str(x) for x in m]))
Run Code Online (Sandbox Code Playgroud)
这当然不是最好的方法,但它肯定更好并且有效。