修改文本文件中的字符串

时间:2015-04-27 11:32:22

标签: python for-loop text file-io iteration

在文件中我有行星名称:

  太阳月亮木星土星天王星海王星金星

我想说“用太阳取代土星”。我试图把它写成一个列表。我尝试了不同的模式(写,追加等)

我认为我很难理解迭代的概念,特别是在迭代文件中的listdictstr时。我知道可以使用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())

5 个答案:

答案 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()