用Python替换文件中的文本

时间:2016-07-26 16:36:06

标签: python file python-3.x python-3.5

我正在使用以下代码在编辑后使用FTP在服务器上上传文件:

import fileinput

file = open('example.php','rb+')

for line in fileinput.input('example.php'):
    if 'Original' in line :
        file.write( line.replace('Original', 'Replacement'))

file.close()    

有一件事,代码在原始位置替换文本,而不是在末尾添加替换文本,原始位置的文本不变。

此外,它不是仅仅替换了文本,而是打印出整行。有谁能告诉我如何解决这两个错误?

3 个答案:

答案 0 :(得分:3)

1)代码在末尾添加替换文本,原始位置的文本不变。

您无法替换文件正文,因为您要使用+信号打开它。这样它就会附加到文件的末尾。

file = open('example.php','rb+')

但这仅适用于追加到文档末尾的情况。

绕过,您可以使用seek()导航到特定行并替换它。或创建2个文件:input_fileoutput_file

2)此外,它不是仅仅替换了文本,而是打印出整行。

这是因为您正在使用:

file.write( line.replace('Original', 'Replacement'))

免费代码:

我已经分为2个文件,一个输入文件和一个输出文件。

首先,它打开ifile并将所有行保存在名为lines的列表中。

其次,它会读取所有这些行,如果存在'Original',则它会replace

更换后,它会保存到ofile

ifile = 'example.php'
ofile = 'example_edited.php'

with open(ifile, 'rb') as f:
    lines = f.readlines()

with open(ofile, 'wb') as g:
    for line in lines:
        if 'Original' in line:
            g.write(line.replace('Original', 'Replacement'))

然后,如果您愿意,可以os.remove()使用以下内容编辑未编辑的文件:

更多信息: Tutorials Point: Python Files I/O

答案 1 :(得分:0)

第二个错误是replace()方法的工作原理。

它返回整个输入字符串,仅替换指定的子字符串。请参见示例here

要写入文件中的特定位置,您应先seek()到正确的位置。

我认为之前曾在几个地方问过这个问题,我会快速搜索一下StackOverflow。

也许this会有所帮助?

答案 2 :(得分:-1)

如果原始文件和替换文件具有相同的大小(以字节为单位),则替换文件中的内容可以正常工作

with open('example.php','rb+') as f:
    pos=f.tell()
    line=f.readline()
    if b'Original' in line:
        f.seek(pos)
        f.write(line.replace(b'Original',b'Replacement'))

(在这种情况下,b'Original'b'Replacement'的大小不同,因此您的文件在此之后会显得很有趣)

编辑:

如果原始尺寸和替换尺寸不同,则有不同的可能性,例如添加字节来填充孔或移动线后的所有内容。