转换标记为CSV

2024-06-02 18:20:32 发布

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

这样的文件:

fieldname_A: eggs
fieldname_B: bacon 
~EOR~
..
..
~EOR~
fieldname_A: eggs
fieldname_C: spam
fieldname_Z: baked beans
~EOR~

总共有40个不同的字段名,大约10000条记录(EOR是记录的结尾),其中包含一组可变字段。大多数字段内容很短,有些很长(超过1000个字符)。你知道吗

我正在寻找一个好的,干净的,pythonic的方式来转换成CSV,或者更确切地说,谷歌电子表格。(数据需要检查和更正。有几个人会这样做。google文档是我所知道的唯一一种快速的方法,可以让他们在不引起版本冲突或同步问题的情况下处理相同的数据。)

Dictwriter看起来很麻烦,因为许多记录(如电子表格中的行)中的字段都是空的。你知道吗

输入文件的形式更像XML,所以我想把它转换成XML,导入Excel,然后作为Google电子表格上传。你知道吗

有什么想法吗?你知道吗


Tags: 文件数据内容结尾记录xmlspambaked
1条回答
网友
1楼 · 发布于 2024-06-02 18:20:32

用这个。。。你知道吗

infile = "d.txt"
data = open(infile, "r").readlines()

dataDict = []
columns = []

rowData = {}
# Create a dictionary list
for line in data:
    if not line.strip():
        continue
    if "~EOR~" in line:
        keys = rowData.keys()
        dataDict.append(rowData)
        columns = list(set(columns) | set(keys))
        rowData = {}
    else:  
        cell = line.split(":", 1);
        print cell
        rowData[cell[0].strip().strip('"').strip("'")] = cell[1].strip().strip('"').strip("'")


# Write dictionary list to file
outfile = "d.csv"

with open(outfile, "w") as fp:

    columns.sort()

    for key in columns:
        fp.write(key + ", ")

    fp.write("\n")

    for data in dataDict:
        for key in columns:
            if key in data:
                fp.write(data[key] + ",")
            else:
                fp.write(",")
        fp.write("\n")

输入:

fieldname_A: eggs
fieldname_B: bacon 
~EOR~
fieldname_A: eggs
fieldname_C: spam
fieldname_Z: baked beans
~EOR~

输出:

fieldname_A, fieldname_B, fieldname_C, fieldname_Z, 
eggs,bacon,,,
eggs,,spam,baked beans,

相关问题 更多 >