Python将结构化数据文件解析为CSV

时间:2018-05-28 02:54:55

标签: python csv

我有一个大的(75MB)数据文件(EMP.txt),看起来像

01ABCD      FIT        PROGRAMMER30000EFGH            
02IJK     LMMACCOUNTS  MANAGER   50000OPQRST   UV

等等。 我有一个数据文件的结构文件(EMPSTRU.txt),看起来像

001 EMPID LENGTH 2
002 EMPNAME LENGTH 10
003 SEX LENGTH 1
004 DEPARTMENT LENGTH 10
005 DESIGNATION LENGTH 10
006 SALARY LENGTH 5
007 SUPERNAME LENGTH 10

现在我如何将数据文件解析为csv格式?我正在使用slice方法从数据文件中提取。此外,还有至少150个字段名称。有没有更好的方法在python中获取列名?目前我手动输入它们像

EMPID = Dataline(0:2)

请帮忙。 感谢。

1 个答案:

答案 0 :(得分:1)

您可以将final Map<Integer, Set<String>> strByLength = s .collect(Collectors.groupingBy(String::length, Collectors.toSet())); 文件直接解析为EMPSTRU.txt可用的说明,例如

struct.unpack

输出

import struct
print(struct.unpack("2s3s2s", "abcdefg"))

在你的情况下,它应该需要......(未经测试)

["ab", "cde", "fg"]

然后您可以使用以下内容提取数据记录:

import struct

rdef = ""
colnames = []
for L in open("EMPSTRU.txt"):
    L = L.strip()
    lpos = L.rindex(" LENGTH ")
    rdef += L[lpos+8:] + "s"
    colnames.append(L[4:lpos]) # skip field number

并使用

将其重写到目标文件
content = struct.unpack(rdef, record)