2024-04-23 15:54:47 发布
网友
我正在处理一个阿拉伯语文本文件,它是一个语料库。
我应该怎么做才能用python导入文件,这样我就可以轻松地访问文件并对其进行分析,而不是每次都在解释器中复制和粘贴内容。这是阿拉伯文件,不是英语。
读写纯文本时,最重要的是知道并指定纯文本encoding。您不应该让Pythonguesses为您进行编码,特别是在实际程序中(编码应该是可配置的,或者您要求用户进行编码)。
许多人对英文文本没有异议,因为ASCII是大多数编码的子集。问题就在那里,一旦程序试图读或写不同编码的文本,它们就会遇到这个问题。
大多数阿拉伯语文本的编码方式是(按流行程度排序的)使用Windows-1256、UTF-8、CP720或ISO 8859-6。您应该提前知道您的纯文本使用的编码是什么,例如,当大多数文本编辑器允许您在保存文件时选择编码时。
我有三个名为طارق的文件,但有三种不同的编码。将这些文件作为原始二进制数据读取会显示这些文件的不同之处,尽管它们是相同的文本:
طارق
>>> f = open('file-utf8.txt', 'rb') >>> f.read() b'\xd8\xb7\xd8\xa7\xd8\xb1\xd9\x82' >>> >>> f = open('file-cp720.txt', 'rb') >>> f.read() b'\xe1\x9f\xa9\xe7' >>> >>> f = open('file-windows1256.txt', 'rb') >>> f.read() b'\xd8\xc7\xd1\xde' >>>
读取这些文件的正确方法是告诉Python应该使用什么编码,以便将其解码为internal Unicode representation(使用/Python33/Lib/encodings/中的映射表):
/Python33/Lib/encodings/
>>> f = open('file-utf8.txt', encoding='utf-8') >>> f.read() 'طارق' >>> >>> f = open('file-cp720.txt', encoding='cp720') >>> f.read() 'طارق' >>> >>> f = open('file-windows1256.txt', encoding='windows-1256') >>> f.read() 'طارق' >>>
编码问题不仅与文件有关。每当您从外部源向程序(如文件、控制台、网络套接字)读取文本时,必须知道编码。另外,当您向外部源代码写入时,必须将文本编码为正确的编码。
编码必须是一致的,如果您的控制台使用拉丁语-1,并且您试图写入控制台,即打印,您将得到一些无意义的单词,或者,如果您幸运,您将得到UnicodeEncodeError异常。
UnicodeEncodeError
有很多猜测编码的方法,但我不会费心去使用它们,因为它们只会掩盖问题。迟早会来的。
1如果由您决定,请始终使用UTF-8,因为它得到了很好的支持。
阿拉伯语通常用Unicode表示。
通常,您可以在中读取文件,然后转换为Unicode:
import codecs f = codecs.open('unicode.rst', encoding='utf-8') for line in f: print repr(line)
有关详细信息,请参阅https://docs.python.org/2/howto/unicode.html#reading-and-writing-unicode-data
在Python中读取Urdu文件时使用此选项:
File = open("Infixes.txt",encoding = "utf-8") print(File.read())
读写纯文本时,最重要的是知道并指定纯文本encoding。您不应该让Pythonguesses为您进行编码,特别是在实际程序中(编码应该是可配置的,或者您要求用户进行编码)。
许多人对英文文本没有异议,因为ASCII是大多数编码的子集。问题就在那里,一旦程序试图读或写不同编码的文本,它们就会遇到这个问题。
大多数阿拉伯语文本的编码方式是(按流行程度排序的)使用Windows-1256、UTF-8、CP720或ISO 8859-6。您应该提前知道您的纯文本使用的编码是什么,例如,当大多数文本编辑器允许您在保存文件时选择编码时。
我有三个名为
طارق
的文件,但有三种不同的编码。将这些文件作为原始二进制数据读取会显示这些文件的不同之处,尽管它们是相同的文本:读取这些文件的正确方法是告诉Python应该使用什么编码,以便将其解码为internal Unicode representation(使用
/Python33/Lib/encodings/
中的映射表):编码问题不仅与文件有关。每当您从外部源向程序(如文件、控制台、网络套接字)读取文本时,必须知道编码。另外,当您向外部源代码写入时,必须将文本编码为正确的编码。
编码必须是一致的,如果您的控制台使用拉丁语-1,并且您试图写入控制台,即打印,您将得到一些无意义的单词,或者,如果您幸运,您将得到
UnicodeEncodeError
异常。有很多猜测编码的方法,但我不会费心去使用它们,因为它们只会掩盖问题。迟早会来的。
1如果由您决定,请始终使用UTF-8,因为它得到了很好的支持。阿拉伯语通常用Unicode表示。
通常,您可以在中读取文件,然后转换为Unicode:
有关详细信息,请参阅https://docs.python.org/2/howto/unicode.html#reading-and-writing-unicode-data
在Python中读取Urdu文件时使用此选项:
相关问题 更多 >
编程相关推荐