[英]String.replace() with special characters only replacing some of them
我在本網站和其他網站上看過許多關於替換字符的不同帖子,並且我以前做過字符串替換。 然而,在這個特定的例子中,我遇到了一個意想不到的問題。 我希望我只是遺漏了一些明顯的東西......
我正在嘗試用 HTML 實體代碼替換特殊字符列表。 我已經嘗試了幾個版本,從純文本替換( ½
到½
)到最后一次迭代,使用字節編碼的字符串(如建議here )
我的代碼的功能非常簡單。 我得到一個文件的內容:
with open(cur_file, 'r', encoding='utf-8') as file_handle:
file_contents = file_handle.read()
file_handle.close()
然后我調用我的'replacer()' function:
good_text = replacer(file_contents)
replacer() function 的內容:
def replacer(text):
replace_chars = {
b'\xc2\xbd': '½', #½
b'\xe2\x80\x9c': '"', #“
b'\xe2\x80\x9d': '"', #”
b'\xe2\x80\x99': '´', #’
b'\xe2\x80\x93': '—', #–
b'\xc2\xa9': '©' #©
}
for k, v in replace_chars.items():
good_text = text.replace(k.decode('utf-8'), v)
print('replacing ' + k.decode('utf-8') + ' with ' + v)
return good_text
然后我將新文本保存回文件中:
with open(cur_file, 'w', encoding='utf-8') as file_handle:
file_handle.write(good_text)
file_handle.close()
print('Done!')
在控制台中,我運行它並得到:
replacing ½ with ½
replacing “ with "
replacing ” with "
replacing ’ with ´
replacing – with —
replacing © with ©
Done!
這是預期的。 但是,我要替換其中字符串的文件具有以下內容:
replace_chars = {
'½': '½',
'“': '"',
'”': '"',
'’': '´',
'–': '—',
'©': '©'
我希望該文件在第一列中不包含½
或其他字符,而是類似於'©': '©'
每次通過你的循環,你都是從原始文本替換,而不是之前替換的結果。 所以最后的結果只是最后的替換,而不是全部。
更改循環,以便將結果存儲回同一個變量中。
for k, v in replace_chars.items():
text = text.replace(k.decode('utf-8'), v)
print('replacing ' + k.decode('utf-8') + ' with ' + v)
return text
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.