我正在处理Hadoop和Hive的输出文本文件,其中文件的字段由control-A分隔。然后我使用Python逐行读取文件,但是stringsplit()
函数即使指定了分隔符也没有正确拆分。在
下面是一些我从Hadoop获得的典型示例数据。注意,^A
实际上是一个控制字符。在
field1^Afield2^Afield3^Afield4
field5^Afield6^Afield7^Afield8
您可以看到,使用控制代码作为分隔符的Linux命令行工具cut
实际上可以工作。它正在输出第三个字段:
然后我编写了一个Python函数,它使用standard Python idiom逐行读取文件:
import re
def read_file(filename):
''' Read file line-by-line and split. '''
with open(filename, "r") as myfile:
for line in myfile:
tokens = line.split('\u0001')
#tokens = line.split('\^A')
#tokens = re.split('\^A', line)
print 'len(tokens): %d, tokens[0]: %s\n' % (len(tokens), tokens[0])
但是,当我运行函数时,字符串没有被正确分割。每行应该有四个标记。在
>>> read_file('test2.txt')
len(tokens): 1, tokens[0]: field1field2field3field4
len(tokens): 1, tokens[0]: field5field6field7field8
正如您在Python函数中看到的,我尝试了三种不同的方法来分割字符串。他们都没用。在
tokens = line.split('\u0001')
tokens = line.split('\^A')
tokens = re.split('\^A', line)
谢谢你的帮助。在
相关问题(没有一个对我有效的解决方案):
假设control-A是字符“\x01”(ASCII码1):
如果要使用“\u0001”表示法,则需要“u”前缀(Python 2):
^{pr2}$相关问题 更多 >
编程相关推荐