读取ASCII 215作为分隔符的输入文件

时间:2013-12-15 01:52:20

标签: python file input delimiter

我正在尝试从具有由ASCII值215分隔的单词对的文件中读取。当我运行以下代码时:

f = open('file.i', 'r')
for line in f.read().split('×'):
    print line

我得到一个看起来像垃圾的字符串。以下是我输入的示例:

abashedness×N
abashment×N
abash×t
abasia×N
abasic×A
abasing×t
Abas×N
abatable×A
abatage×N
abated×V
abatement×N
abater×N
Abate×N
abate×Vti
abating×V
abatis×N
abatjours×p
abatjour×N
abator×N
abattage×N
abattoir×N
abaxial×A

以上是运行上面代码后的输出:

z?Nlner?N?NANus?A?hion?hk?hhn?he?hanoconiosis?N

我的目标是最终将其读入元组列表或其他类似的内容,但我无法将数据打印出来。

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

嗯,有两件事:

  • 您的来源可能是Unicode!使用逃生并保持安全。
  • 以二进制模式读取。
with open("file.i", "rb") as f:
    for line in f.read().split(b"\xd7"):
        print(line)

答案 1 :(得分:0)

角色正在界定单词和词性,但每个单词仍然是单独的:

with open('file.i', 'rb') as handle:
    for line in handle:
        word, pos = line.strip().split('×')

        print word, pos

您的代码正在拆分整个文件,因此您最终会使用N\nabatableN\nAbateVti\nabating等字词。

答案 2 :(得分:0)

感谢您的帮助,我能够将这些代码组合在一起,返回一个包含我正在寻找的列表的列表。

with open("mobyposi.i", "rb") as f:
    content = f.readlines()
    f.close()
    content = content[0].split()
    for item in content:
        item.split("\xd7")

确实是unicode!但是,上述实现丢弃了unicode值之后和换行符之前的文本。

编辑:能够减少到:

with open("mobyposi.i", "rb") as f:
    for item in f.read().split():
        item.split("\xd7")

答案 3 :(得分:0)

要将文件中的字节解释为文本,您需要知道其字符编码。 There Ain't No Such Thing As Plain Text。您可以使用codecs模块来阅读文本:

import codecs

with codecs.open('file.i', 'r', encoding='utf-8') as file: 
     for line in file:
         word, sep, suffix = line.partition(u'\u00d7')
         if sep:
            print word

放置文件的实际字符编码,而不是utf-8占位符,例如cp1252

字符串文字中的非ascii字符需要脚本顶部的源字符编码声明,因此我使用了unicode转义:u'\u00d7'