当前位置: 首页 > 知识库问答 >
问题:

Python读取文本文件并对控制字符进行拆分

隆飞宇
2023-03-14

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

field1^Afield2^Afield3^Afield4
field5^Afield6^Afield7^Afield8
bash> cat test.txt | cut -d $'\001' -f 3
field3
field7

然后,我编写了一个Python函数,该函数使用标准的Python习惯用法逐行读取文件:

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)

用蟒蛇定界克拉A

re.split在^A上不工作

共有1个答案

寇夜洛
2023-03-14

假设control-A是字符“\x01”(ASCII代码1):

>>> line="field1\x01field2\x01field3\x01field4"
>>> line.split("\x01")
['field1', 'field2', 'field3', 'field4']

如果要使用“\u0001”表示法,则需要“u”前缀(Python 2):

>>> line.split(u"\u0001")
[u'field1', u'field2', u'field3', u'field4']
 类似资料:
  • 问题内容: 我有一些带有时间信息的文本文件,例如: 现在,我需要文件的第三列来计算平均值。 我怎样才能做到这一点?我需要获取所有文本行,然后获取最后一列? 问题答案: 您可以阅读通过线使用的文件中的行或,甚至一些其他techinique。使用扫描仪非常简单,如下所示: 要使用定义的分隔符分割字符串,可以使用split方法,该方法将正则表达式作为参数,并按与该表达式匹配的所有字符序列分割字符串。就您

  • 问题内容: 在Python中,如何读取二进制文件并在该文件的每个字节上循环? 问题答案: Python 2.4及更早版本 Python 2.5-2.7 请注意,with语句在2.5以下的Python版本中不可用。要在v 2.5中使用它,你需要导入它: 在2.6中是不需要的。 Python 3 在Python 3中,这有点不同。我们将不再以字节模式而是字节对象从流中获取原始字符,因此我们需要更改条件

  • 问题内容: 我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取 详细而言,文件格式为: 如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据? 问题答案: 读取二进制文件内容,如下所示: 然后使用struct.unpack “解压缩”二进制数据

  • 问题内容: 我已经解决了这些问题,但似乎仍然无法解决。我有一个文本文件,分为几行。每行包含5个数据,中间用“,”分隔。我正在尝试读取此文件并将信息拆分为以下形式的字符串数组: 请有人可以帮我解决一个简单的解决方案!?谢谢!!!:) 数据示例: 样例代码: 公共无效的readFile(){ 错误 07-24 06:26:56.524:E / AndroidRuntime(27203):致命例外:主要

  • 问题内容: 如何在不使用?的情况下逐行读取文本文件的内容? 例如,我有一个文本文件,里面看起来像这样: 我想创建两个,然后使用类似这样的东西 这样,它分配的价值,以及价值。 问题答案: 您应该使用。 然后,您可以从下一个索引中访问列表的一个特定元素: 这将给您第一行(即:Purlplemonkeys)

  • 问题内容: 我有一个文件,我想用Java读取并将其拆分为(用户输入)输出文件。这是我读取文件的方式: 如何将文件拆分为文件? 注意-由于文件中的条目数约为100k,因此我无法将文件内容存储到数组中,然后将其拆分并保存到多个文件中。 问题答案: 由于一个文件可能很大,因此每个拆分文件也可能很大。 例: 源文件大小:5GB 数字分割:5:目的地 档案大小:每个1GB(5个档案) 即使我们有这样的内存,