Python读取文本文件并在控制ch上拆分

2024-10-04 01:29:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理Hadoop和Hive的输出文本文件,其中文件的字段由control-A分隔。然后我使用Python逐行读取文件,但是stringsplit()函数即使指定了分隔符也没有正确拆分。在

下面是一些我从Hadoop获得的典型示例数据。注意,^A实际上是一个控制字符。在

field1^Afield2^Afield3^Afield4
field5^Afield6^Afield7^Afield8

您可以看到,使用控制代码作为分隔符的Linux命令行工具cut实际上可以工作。它正在输出第三个字段:

^{pr2}$

然后我编写了一个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)

谢谢你的帮助。在

相关问题(没有一个对我有效的解决方案):

delimiting carat A in python

re.split not working on ^A


Tags: 文件函数inrehadoopreadlenline