我正在处理来自Hadoop和Hive的输出文本文件,其中文件的字段由control-A分隔。然后我使用Python逐行读取文件,但是字符串
split()
即使我指定了分隔符,函数也没有正确拆分。
^A
实际上是一个控制字符。
field1^Afield2^Afield3^Afield4
field5^Afield6^Afield7^Afield8
您可以看到Linux命令行工具
cut
bash> cat test.txt | cut -d $'\001' -f 3
field3
field7
然后我编写了一个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
tokens = line.split('\u0001')
tokens = line.split('\^A')
tokens = re.split('\^A', line)
谢谢你的帮助。
delimiting carat A in python
re.split not working on ^A