Python - 使用带编解码器的.txt文件替换()和utf-8编码/解码

时间:2016-05-17 15:04:49

标签: python encoding utf-8

我在使用整个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)

1 个答案:

答案 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