使用Python在二进制文件中查找和替换

1 投票
2 回答
1173 浏览
提问于 2025-04-15 23:27

我正在尝试在Mac OS X电脑上对一个文件进行“查找和替换”。虽然看起来这个操作是成功的,但文件似乎被改变了。我使用的文本编辑器(Text Wrangler)在完成这个操作后甚至无法打开这个文件。

这是我写的代码:

  import fileinput
    for line in fileinput.FileInput("testfile.txt",inplace=1):
       line = line.replace("newhost",host)
       print line,

当我在终端查看这个文件时,它显示“testfile”可能是一个二进制文件。要查看吗?这个替换操作有可能会损坏文件吗?我还有其他方法可以让这个操作成功吗?非常感谢你的帮助。

谢谢,
Aaron

更新:这个文件实际上不是.txt文件,而是.plist文件,这是Mac OS X中的一个偏好设置文件,这个信息是否有影响?

这是.plist文件的链接:http://www.queencitytech.com/plist.zip

2 个回答

0

试着用 sys.stdout.write 来代替 print。readlines() 会保留读取行末的换行符。而 print 语句会再加一个换行符,所以可能会导致文件出现双倍的空行。

0

你的代码对我来说运行得很好。不过,我建议你换个方法:不要直接覆盖文件。我个人不喜欢直接修改文件,因为如果出现了错误,文件就会丢失。你可以先生成一个新文件,然后手动复制过去(或者如果你真的想的话,也可以在Python里完成这个操作)。

PATH = 'testfile.txt'
FILE = open(PATH)
OUT_FILE = open('out_' + PATH, 'w')

for line in FILE.readlines():
   print >> OUT_FILE, line.replace('newhost', host),

撰写回答