使用python转换空格分隔的文本文件?

用户3429617

我正在尝试将此空格分隔的文本文件转换为列和行(我想最终将其转换为 JSON)。我的脚本可能无法分隔列,主要是因为我正在寻找空格。我无法更改输入的格式(输入的文本文件)

我的文件格式有问题,这是一个非常简单的例子

col1 col2                 col3 text                      col4

1403 bash                 2014-07-28 22:32:53 UTC+0000   sudo bash
1464 bash                 2014-07-28 22:32:28 UTC+0000   sudo root

当我解析文件时,我得到了破折号下方的数据:

['1403', 'bash', '2014-07-28', '22:32:53', 'UTC+0000', 'sudo', 'bash']

我希望它看起来像这样:

['1403', 'bash', '2014-07-28 22:32:53 UTC+0000', 'sudo bash']

这是一个非常基本的例子。但基本上我将标题映射到破折号下方的数据。如果您有任何帮助,请告诉我。

注意:输出不必完全如图所示,我只想能够分离 cols 数据。

到目前为止,这是我在代码中所拥有的内容,它将标头分隔为各个列:

colNames = testFile.readline()
#tempList = re.split('(\s )', colNames)
headerList = []
for i in tempList:
    j = i.replace(' ','')
    if j != '':
        headerList.append(j)

然后我有一个循环来根据数据的位置遍历数据(这是我认为我需要找到一种更好地分离数据的方法的地方):

   for line in testFile.readlines():
        if rowCounter > 0:
            row = line.split()
            print row
            for i in range(len(headerList)):
                colNameDic.update({headerList[i]:row[i]})
            rowDic = dict(colNameDic)
            fileList.append(rowDic)
            rowDic = {}
        rowCounter +=1
博菲

如果标题行的列名中没有多余的空格,则可以使用slice内置函数拆分数据行(请注意,我在标题行中添加了下划线以规范列名)

In [20]: h = 'col1 col2                 col3_text                      col4\n'
In [21]: r = '1403 bash                 2014-07-28 22:32:53 UTC+0000   sudo bash\n'
In [22]: fields = h.split()
    ...: ifields = [h.index(f) for f in fields]+[None]
In [23]: slices = [slice(i,j) for i, j in zip(ifields, ifields[1:])]
In [24]: tokens = [r[s] for s in slices]
In [25]: tokens
Out[25]: 
['1403 ',
 'bash                 ',
 '2014-07-28 22:32:53 UTC+0000   ',
 'sudo bash\n']
In [26]: 

PS,您可能想要rstrip单个项目,[r[s].rstrip() for s in slices]


附录

如果可以在有效的列名和垃圾之间找到一个判别式,则可以放宽无多余空格的要求......关于你的特定数据格式(没有下划线......)

In [35]: h = 'col1 col2                 col3 text                      col4\n'
In [36]: r = '1403 bash                 2014-07-28 22:32:53 UTC+0000   sudo bash\n'
In [37]: fields = [f for f in h.split() if f[:3]=='col']
In [38]: ifields = [h.index(f) for f in fields]+[None]
In [39]: slices = [slice(i,j) for i, j in zip(ifields, ifields[1:])]
In [40]: tokens = [r[s].rstrip() for s in slices]
In [41]: tokens
Out[41]: ['1403', 'bash', '2014-07-28 22:32:53 UTC+0000', 'sudo bash']
In [42]: 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

操作空格分隔的文本文件

在 Python 中使用空行作为分隔符将文本文件转换为列表

将以空格分隔的文本文件转换为命名向量以计算HWE

如何解析空格分隔的文本文件

从文本文件读取逗号和空格分隔的数字

带有空格分隔的Python 3文本文件列出

如何在python中读取充满json对象并以空格分隔的文本文件

将带有空格分隔符的文本文件导入python中的csv

在Python中制作(空格分隔)文本文件的列(或行)数组

使用空格分隔符将对象从文本文件读入数组

在python中使用自定义多个分隔符将文本文件转换为数据框

使用 Python 将文本文件转换为表格

在Python中将以竖线分隔的文本文件的文件夹转换为CSV

如何在Python中将制表符分隔的文本文件转换为CSV文件

如何从文本文件中提取由空格分隔的数字列表并将它们转换为整数数组。- Python

将管道分隔的文本文件转换为xls

使用bash将表转换为逗号分隔在文本文件中

避免由于空格字符作为分隔符+ Python文本文件中的文本而导致解析错误

将文本文件从双倍空格分隔为制表符分隔

Excel中带有多个空格的空格分隔的文本文件

Python并排合并逗号分隔的文本文件

使用Regex分隔文本文件中的单词

在文本文件上使用分隔符

使用bash分隔文本文件中的交易

如何使用空格android java读取文本文件

使用python拆分行并将分隔符添加到文本文件中

Python - 使用分隔符从文本文件中拆分数据

如何使用numpy导入python中没有分隔符的文本文件?

在python中使用递归根据分隔符拆分文本文件