将文本文件转换为字符串(Python 3)

问题描述 投票:0回答:3

我想将一个文本文件转换为一个字符串,我开始使用这个函数,这是用Python 2编写的:

def parseOutText(f):
    f.seek(0)  
    all_text = f.read()

    content = all_text.split("X-FileName:")
    words = ""
    if len(content) > 1:
        text_string = content[1].translate(string.maketrans("", ""), string.punctuation)

        words = text_string

        ### split the text string into individual words, stem each word,
        ### and append the stemmed word to words (make sure there's a single
        ### space between each stemmed word)

    return words

正如您所看到的,我必须为此函数添加一些代码,但它不会编译(编译器会出错,说'string'没有函数'maketrans')。我确信这段代码很容易被翻译成Python 3,但我不知道它的作用直到评论行。它是否只是省略标点符号并将文本转换为字符串?

python text python-2.x
3个回答
1
投票

Python 3.x maketranstranslate具有Python 2前辈的所有基本功能,但更多 - 但它们具有不同的API。所以,你必须了解他们正在做什么才能使用它们。

在2.x的translate采取了一个非常简单的table,由string.maketrans制作,加上一个单独的deletechars列表。

在3.x中,表格更复杂(很大程度上是因为它现在翻译Unicode字符,而不是字节,但它还有其他新功能)。该表由静态方法str.maketrans而不是函数string.maketrans构成。并且该表包含删除列表,因此您不需要单独的参数来translate

来自文档:

static str.maketrans(x[, y[, z]])

此静态方法返回可用于str.translate()的转换表。

如果只有一个参数,则它必须是将Unicode序数(整数)或字符(长度为1的字符串)映射到Unicode序数,字符串(任意长度)或None的字典。然后将字符键转换为序数。

如果有两个参数,则它们必须是长度相等的字符串,并且在结果字典中,x中的每个字符将映射到y中相同位置的字符。如果有第三个参数,则它必须是一个字符串,其字符将映射到结果中的None


因此,要创建一个删除所有标点符号并在3.x中不执行任何操作的表,请执行以下操作:

table = str.maketrans('', '', string.punctuation)

并申请它:

translated = s.translate(table)

同时,既然你正在处理Unicode,你确定string.punctuation是你想要的吗?正如the docs所说,这是:

ASCII字符串,在C语言环境中被视为标点字符。

因此,例如,卷曲引号,在英语以外的语言中使用的标点符号等将不会被删除。

如果这是一个问题,你必须做这样的事情:

translated = ''.join(ch for ch in s if unicodedata.category(ch)[0] != 'P')

0
投票

所以我找到了这段代码,它就像一个魅力:

exclude = set(string.punctuation)
string = ''.join(ch for ch in string if ch not in exclude)

0
投票

改变这一行

text_string = content[1].translate(string.maketrans("", ""), string.punctuation)'

对此

text_string = content[1].translate((str.maketrans("", ""), string.punctuation)) '
© www.soinside.com 2019 - 2024. All rights reserved.