如何使用python3搜索和替换文件中的文本?
这是我的代码:
import os
import sys
import fileinput
print ("Text to search for:")
textToSearch = input( "> " )
print ("Text to replace it with:")
textToReplace = input( "> " )
print ("File to perform Search-Replace on:")
fileToSearch = input( "> " )
#fileToSearch = 'D:\dummy1.txt'
tempFile = open( fileToSearch, 'r+' )
for line in fileinput.input( fileToSearch ):
if textToSearch in line :
print('Match Found')
else:
print('Match Not Found!!')
tempFile.write( line.replace( textToSearch, textToReplace ) )
tempFile.close()
input( '\n\n Press Enter to exit...' )
输入文件:
hi this is abcd hi this is abcd
This is dummy text file.
This is how search and replace works abcd
当我在上面的输入文件中搜索并将“ram”替换为“abcd”时,它就像一个咒语。但当我反过来做,即替换'abcd'由'ram',一些垃圾字符被留在最后。
将'abcd'替换为'ram'
hi this is ram hi this is ram
This is dummy text file.
This is how search and replace works rambcd
(pip install python-util)
from pyutil import filereplace
filereplace("somefile.txt","abcd","ram")
将所有出现的“abcd”替换为“ram”。
该函数还通过指定regex=True来支持regex
from pyutil import filereplace
filereplace("somefile.txt","\\w+","ram",regex=True)
免责声明:我是作者(https://github.com/MisterL2/python-util)
正如michaelb958所指出的,不能用不同长度的数据替换现有的部分,因为这会使其余部分不合适。我不同意其他人建议你从一个文件读到另一个文件。相反,我将把文件读入内存,修复数据,然后在单独的步骤中将其写入相同的文件。
# Read in the file
with open('file.txt', 'r') as file :
filedata = file.read()
# Replace the target string
filedata = filedata.replace('abcd', 'ram')
# Write the file out again
with open('file.txt', 'w') as file:
file.write(filedata)
除非你有一个巨大的文件要处理,它太大了,无法一次性加载到内存中,或者你担心如果在向文件写入数据的第二步过程中中断,可能会导致数据丢失。
(pip install python-util)
from pyutil import filereplace
filereplace("somefile.txt","abcd","ram")
将所有出现的“abcd”替换为“ram”。
该函数还通过指定regex=True来支持regex
from pyutil import filereplace
filereplace("somefile.txt","\\w+","ram",regex=True)
免责声明:我是作者(https://github.com/MisterL2/python-util)
正如Jack Aidley发布的和J.F. Sebastian指出的那样,这个代码是行不通的:
# Read in the file
filedata = None
with file = open('file.txt', 'r') :
filedata = file.read()
# Replace the target string
filedata.replace('ram', 'abcd')
# Write the file out again
with file = open('file.txt', 'w') :
file.write(filedata)`
但这段代码将工作(我已经测试过了):
f = open(filein,'r')
filedata = f.read()
f.close()
newdata = filedata.replace("old data","new data")
f = open(fileout,'w')
f.write(newdata)
f.close()
使用此方法,fileein和fileout可以是同一个文件,因为Python 3.3将在打开进行写入时覆盖该文件。