我在使用整个UTF-8 de- / encoding时遇到了一些麻烦。 以下函数应替换给定数据中的多个单词。背后的背景是,我正在解析多个PDF文档并试图找到某些关键字以供进一步使用。但是,将PDF解析为字符串会导致拼写错误,此功能可以解决它。 我显着缩小了这个功能,但是有更多的替换和更多的类型等等,但这个小部分存在的主要问题是。
虽然replaceSimilar1()工作得非常好,但replaceSimilar2()不会按照我想要的方式替换单词。 txt文档包含与数组完全相同的条目,并以UTF-8保存。 我知道,它与en / /解码某些部分有关,但不管我到目前为止做了什么都没有用。没有例外,它只是没有替换给定的单词。
这是我的代码(包括测试主要内容):
# -*- coding: utf-8 -*-
import codecs
RESOURCE_PATH="resource"
def replaceSimilar1(data, type):
ZMP_array=["zählpunkt:", "lpunkt:", "zmp:", "hipunkt:", "h punkt:", "htpunkt:", ]
adress_array=["zirkusweg", "zirktisweg", "rkusweg", "zirnusweg", "jürgen-töpfer", "-töpfer", "jürgen-", "pfer-stras", "jürgentöpfer", "ürgenlöpfer"]
if type=="adress":
array=adress_array
elif type=="zmp":
array=ZMP_array
else:
array=["",""]
for word in array:
data=data.lower().replace(word, type)
return data
def replaceSimilar2(data, type):
c_file=codecs.open(RESOURCE_PATH+"\\"+type+".txt", "r+", "utf-8")
for line in c_file.readlines():
data=data.lower().replace(line.encode("utf-8"), type)
c_file.close()
return data
if __name__=="__main__":
testString="this lpunkt: should be replaced by zmp as well as -töpfer should be replaced by adress..."
print("testString: "+testString)
#PART 1:
replaced1=replaceSimilar1(testString, "zmp")
replaced1=replaceSimilar1(replaced1, "adress")
print("replaced 1: "+replaced1)
# PART 2:
replaced2=replaceSimilar2(testString, "zmp")
replaced2=replaceSimilar2(replaced2, "adress")
print("replaced 2: "+replaced2)
答案 0 :(得分:1)
问题不在于编码,而是在读取文件时,line
以换行符char(\n
)结束。请改用line.strip()
,将功能更改为
def replaceSimilar2(data, type):
c_file=codecs.open(RESOURCE_PATH+"\\"+type+".txt", "r+", "utf-8")
for line in c_file:
data=data.lower().replace(line.strip().encode("utf-8"), type)
c_file.close()
return data