在文件中我有行星名称:
太阳月亮木星土星天王星海王星金星
我想说“用太阳取代土星”。我试图把它写成一个列表。我尝试了不同的模式(写,追加等)
我认为我很难理解迭代的概念,特别是在迭代文件中的list
,dict
或str
时。我知道可以使用csv或json甚至pickle模块完成。但我的目标是使用for循环来掌握迭代,以修改txt文件。我只想使用.txt文件来做这件事。
with open('planets.txt', 'r+')as myfile:
for line in myfile.readlines():
if 'saturn' in line:
a = line.replace('saturn', 'sun')
myfile.write(str(a))
else:
print(line.strip())
答案 0 :(得分:0)
试试这个,但请记住,如果你使用string.replace方法,它将替换例如testsaturntest到testsuntest,你应该使用正则表达式:
In [1]: cat planets.txt
saturn
In [2]: s = open("planets.txt").read()
In [3]: s = s.replace('saturn', 'sun')
In [4]: f = open("planets.txt", 'w')
In [5]: f.write(s)
In [6]: f.close()
In [7]: cat planets.txt
sun
答案 1 :(得分:0)
这将使用您想要的替换替换文件中的数据并输出值:
with open('planets.txt', 'r+') as myfile:
lines = myfile.readlines()
modified_lines = map(lambda line: line.replace('saturn', 'sun'), lines)
with open('planets.txt', 'w') as f:
for line in modified_lines:
f.write(line)
print(line.strip())
替换文件中的行是非常棘手的,所以我读取文件,替换文件并将它们写回文件。
答案 2 :(得分:0)
如果您只想替换文件中的单词,可以这样做:
import re
lines = open('planets.txt', 'r').readlines()
newlines = [re.sub(r'\bsaturn\b', 'sun', l) for l in lines]
open('planets.txt', 'w').writelines(newlines)
答案 3 :(得分:0)
f = open("planets.txt","r+")
lines = f.readlines() #Read all lines
f.seek(0, 0); # Go to first char position
for line in lines: # get a single line
f.write(line.replace("saturn", "sun")) #replace and write
f.close()
I think its a clear guide :)你可以找到一切。
答案 4 :(得分:0)
我没有测试过您的代码,但r+
的问题是您需要跟踪文件中的位置,以便您可以重置文件位置,以便替换当前行而不是写入替换后的话。我建议创建一个变量来跟踪你在文件中的位置,以便你可以调用myfile.seek()