我的任务是获取一个文本文件并让它被Python读取为一个非常长的字符串。也就是说,它不像csv或tsv,根本没有文本文件的表格结构,它只是一大堆的单词。然而,文本文件包含逗号和引号以及这种性质的东西,因此我正在解析问题。
我试过了:
with open('text_file.txt') as f:
text_data = f.read().translate(string.punctuation)
这导致出现错误:'charmap'编解码器无法解码位置47的字节0x9d:字符映射到'undefined'
我不确定该错误是否是.txt文件中标点符号干扰解析过程的结果,或者是否有一些奇怪的非Unicode字符无法读取。潜在地,我可能需要一个能够解决这两个问题的解决方案。
如果你觉得有更好的方法比我的同步阅读/条带标点符号方法来实现我的目标,请随时提出替代方案。
答案 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())