无法获得variable.replace正常工作

时间:2010-06-14 15:57:16

标签: python

我正在尝试用python文件中的新字符串替换字符串,并将新字符串永久地写入它。当我运行下面的脚本时,它会删除部分字符串而不是所有字符串。文件中的字符串是:

self.id = "027FC8EBC2D1"

我必须替换字符串的脚本是:

def edit():

    o = open("test.py","r+") #open 
    for line in open("test.py"):   
        line = line.replace("027FC8EBC2D1","NewValue")  
        o.write(line) 
    o.close()

edit()

感谢您的帮助。

5 个答案:

答案 0 :(得分:5)

除非替换值和原始值具有完全相同的长度,否则您无法安全地执行您想要执行的操作。除非得到保证,否则我会复制文件:

with open('input.txt', 'r') as in_file:
    with open('output.txt', 'w') as out_file:
        for line in in_file:
           line = line.replace('027FC8EBC2D1', 'NewValue')
           out_file.write(line)

编辑(删除了误导性信息)

答案 1 :(得分:2)

尝试这样的事情:

import fileinput
for line in fileinput.input('test.py', inplace=1):
  line.replace("027FC8EBC2D1","NewValue")

这使你调用fh.close()无关(处理它)并阻止你一次打开文件的多个副本。

答案 2 :(得分:2)

使用Python对文本文件执行(实际模拟 ;-)“就地替换”的正确方法是fileinput模块:

import fileinput

for line in fileinput.input(['test.py'], inplace=True):
  print line.replace('027FC8EBC2D1', 'NewValue'),

注意另一个重要的细节,其他答案表明同一个模块:input的第一个参数必须是文件名的列表(不是字符串!),并且,您执行必须print生成的文件中所需的每一行(fileinput重定向标准输出以执行 - 实际模拟 - “覆盖就地”效果)。

最后一个小但不可忽略的细节:print语句末尾的逗号是为了避免在最后添加另一个换行符(因为每个line已经以换行符结束了! - )

答案 3 :(得分:1)

您正在以只读方式打开文件并尝试写入该文件。而且你也一次打开它两次。

你需要重新组织它,以便你只打开一次,并且它是可读写的。

答案 4 :(得分:1)

如果你有足够的内存,与你的文件大小相比,你实际上可以逃脱这个:

# Open the file for read/write access
f = open( 'test.py', 'r+' )

# Read the entire contents of the file into memory
data = f.read()

# Replace the old value with the new one
data.replace( '027FC8EBC2D1', 'NewValue' )

# Truncate the file (in case NewValue is shorter than OldValue)
f.truncate( 0 )

# Write all the data out again
f.write( data )

# Close the file
f.close()

我不建议将它用于非常大的文件,但它会比您预期的更快。