python 3 - 搜索和替换文本文件 -

时间:2015-12-14 03:46:17

标签: python-3.x

我正在使用脚本在逗号分隔的文本文件中搜索和替换字符串。

将“可用”替换为“不可用”可以正常工作。

updateBook = updateBook.replace("available", "not-available")

但是,如果字符串包含单引号和/或逗号等字符,则会失败。

例如:

替换:'可用','6ba8c817-d72d-4593-8914-7a40d733b6db','free \ n'

with:'not-available','6ba8c817-d72d-4593-8914-7a40d733b6db','jorge'

我试过逃避引号和逗号失败了。

updateBook = updateBook.replace("\'available\'\, \'6ba8c817-d72d-4593-8914-7a40d733b6db\'\, \'free", 
"\'not-available\'\, \'6ba8c817-d72d-4593-8914-7a40d733b6db\'\, \'jorge")

以下是代码

# Read in the file
updateBook = None
with open('books.txt', 'r') as f:
    updateBook = f.read()

# Replace the target string

updateBook = updateBook.replace("'available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'free\n'", 
"'not-available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'jorge'")


# Write changes to the file.
with open('books.txt', 'w') as f:
    f.write(updateBook)

如果可以提供帮助,请立即行动。谢谢

1 个答案:

答案 0 :(得分:0)

Regular expressions可能会对您有所帮助。这取决于您需要替换的一般程度。

import re


def repl(match):
    d = match.groupdict()
    d.update('one': 'non-available', 'two': '6ba8c817-d72d-4593-8914-7a40d733b6db', 'three': 'jorge')
    s = '{preone}{one}{pretwo}{two}{prethree}{three}{postthree}'.format(**d)


original_string = 'available...'
escaped_values = map(re.escape, ['available', '6ba8c817-d72d-4593-8914-7a40d733b6db', 'free'])
regex_string = r'^(?P<preone>[\'\"])(?P<one>{0})(?P<pretwo>[\'\"],\s*[\'\"])(?P<two>{1})(?P<prethree>[\'\"],\s*[\'\"])(?P<three>{2})(?P<postthree>[\'\"])$'.format(*escaped_values)
replaced_string re.sub(regex_string, repl, original_string)