我有一个文本文件存储在unicode中,我试图检索每列的数据并放入一个列表供以后计算。我的代码如下。它不是作为一条线而是作为字符读取
文字档案
DateρOrderIDρProductIDρUserIDρAccMngrIDρQuantity
2013-01-01ρ1000ρ1ρ1ρ10
2013-01-01ρ1000ρ2ρ1ρ5
代码
import codecs
fhand = codecs.open('Transaction_logs.txt',encoding='utf-8')
inp = fhand.read()
#print inp
for line in inp:
print repr(line)
示例输出
u'\r', u'\n, u'2',u'0'
答案 0 :(得分:1)
file.read()
将整个内容作为单个字符串读取,因此您的for
循环会对单个字符进行迭代。您所需要的只是直接迭代文件,即:
fhand = codecs.open('Transaction_logs.txt',encoding='utf-8')
for line in fhand:
print repr(line)
现在给出你的文件格式,你可能想要使用内置的csv
模块 - 它可以处理任何分隔符并妥善处理很多低级无聊的细节。
答案 1 :(得分:0)
这是一个奇怪的分隔符,但这就是你所需要的。我注意到你的输入文件也有BOM字符。使用utf-8-sig
自动识别并从输入中删除它,
with codecs.open('Transaction_logs.txt',encoding='utf-8-sig') as f:
for line in f:
print line.strip().split(u'\u03c1')
输出:
[u'Date', u'OrderID', u'ProductID', u'UserID', u'AccMngrID', u'Quantity']
[u'2013-01-01', u'1000', u'1', u'1', u'10']
[u'2013-01-01', u'1000', u'2', u'1', u'5']
请注意,csv
模块在没有其他帮助的情况下不能很好地执行Unicode。例如,在我的测试中,它只允许1个字符的分隔符,并且在内部不支持Unicode,并且您的分隔符编码为3个字节。