同时读取原始文本文件和条带标点符号

时间:2016-12-23 18:39:38

标签: string python-3.x

我的任务是获取一个文本文件并让它被Python读取为一个非常长的字符串。也就是说,它不像csv或tsv,根本没有文本文件的表格结构,它只是一大堆的单词。然而,文本文件包含逗号和引号以及这种性质的东西,因此我正在解析问题。

我试过了:

with open('text_file.txt') as f:
    text_data = f.read().translate(string.punctuation)

这导致出现错误:'charmap'编解码器无法解码位置47的字节0x9d:字符映射到'undefined'

我不确定该错误是否是.txt文件中标点符号干扰解析过程的结果,或者是否有一些奇怪的非Unicode字符无法读取。潜在地,我可能需要一个能够解决这两个问题的解决方案。

如果你觉得有更好的方法比我的同步阅读/条带标点符号方法来实现我的目标,请随时提出替代方案。

1 个答案:

答案 0 :(得分:1)

看起来你的文件是编码的,但没有单一的标准方法来检测编码,所以需要一些猜测工作。有各种各样的模块和工具可供帮助,我已经包含了一个名为chardet的模块来为我工作。

您对str.translate的使用方式也有疑问。它需要一个转换表(通常使用str.ma ketrans构建) - 您的技术不会删除标点符号。您可能最好使用正则表达式来查找单词并从那里重建字符串。

from chardet.universaldetector import UniversalDetector
import re

detector = UniversalDetector()
with open('text_file.txt', 'rb') as f:
    for line in f:
        detector.feed(line)
        if detector.done:
            break
detector.close()

with open('text_file.txt', encoding=detector.result['encoding']) as f:
    text = ' '.join(re.findall(r'\w+', f.read())