4

可能重复:
在 Python 中搜索和替换文件中的一行
如何在 Python 中修改文本文件?

我有一个输入文件,我需要在运行程序之前用需要修改的不同文件重写它。我在这里尝试了各种解决方案,但似乎没有一个有效。我最终只是用一个空白文件覆盖了我的文件

f = open(filename, 'r+')
text = f.read()
text = re.sub('foobar', 'bar', text)
f.seek(0)
f.write(text)
f.truncate()
f.close()

或者例如使用该代码,每次运行程序时我要更改的名称都不同,因此我需要替换整行而不仅仅是一个关键字

4

2 回答 2

3

一种简单的方法可能是将文本读入字符串,然后将字符串与要写入的文本连接起来:

infile = open('hey.txt','r+')
content = infile.read()
text = ['foo','bar']
for item in text:
     content +=item  #adds 'foo' on first iteration, 'bar' on second
infile.write(content)
infile.close()

或更改特定关键字:

infile = open('hey.txt','r+')
content = infile.read()
table = str.maketrans('foo','bar')
content = content.translate(table)  #replaces 'foo' with 'bar'
infile.write(content)
infile.close()

或逐行更改,您可以使用 readlines 并将每一行称为列表的索引:

infile = open('hey.txt','r+')
content = infile.readlines() #reads line by line and out puts a list of each line
content[1] = 'This is a new line\n' #replaces content of the 2nd line (index 1)
infile.write(content)
infile.close()

也许不是一个特别优雅的解决问题的方法,但它可以封装在一个函数中,并且“文本”变量可以是多种数据类型,如字典、列表等。还有很多方法可以替换文件中的每一行,它仅取决于更改行的标准(您是在搜索行中的字符或单词吗?您是否只是想根据文件中的位置替换一行?)- - 所以这些也是需要考虑的一些事情。

编辑:为第三个代码示例添加了引号

于 2012-12-10T20:16:13.137 回答
0

虽然丑陋,但这个解决方案最终会奏效

infile = open('file.txt', 'r+')
content = infile.readlines() #reads line by line and out puts a list of each line
content[1] = "foo \n" #replaces content of the 2nd line (index 1)
infile.close
infile = open('file.txt', 'w') #clears content of file. 
infile.close
infile = open('file.txt', 'r+')
for item in content: #rewrites file content from list 
    infile.write("%s" % item)
infile.close()

谢谢大家的帮助!!

于 2012-12-11T16:39:57.467 回答