修改文本文件中的字符串

Modify a string in a text file

在一个文件中我有行星的名称:

sun moon jupiter saturn uranus neptune venus

我想说"replace saturn with sun"。我试着把它写成一个列表。我尝试了不同的模式(写入、追加等)

我想我很难理解迭代的概念,尤其是在迭代文件中的 listdictstr 时。我知道可以使用 csv 或 json 甚至 pickle 模块来完成。但是我的 objective 是掌握使用 for...loop 修改 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())

试试这个,但请记住,如果您使用 string.replace 方法,它会将例如 testsaturntest 替换为 testsuntest,您应该使用 regex 代替:

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

这会将文件中的数据替换为您想要的替换值并打印出值:

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

替换文件中的行非常棘手,所以我改为读取文件、替换文件并将它们写回文件。

如果你只是想替换文件中的单词,你可以这样做:

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)
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 :)你可以找到所有的东西。

我没有测试过你的代码,但 r+ 的问题是你需要跟踪你在文件中的位置,以便你可以重置文件位置,从而替换当前行写替换后记。我建议创建一个变量来跟踪您在文件中的位置,以便您可以调用 myfile.seek()