0

次のようなファイル:

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

合計で、40 の異なるフィールド名、約 10,000 のレコード (EOR は End Of Record) で、フィールドの可変セットが含まれています。ほとんどのフィールド コンテンツは短く、中には非常に長いもの (1000 文字以上) もあります。

これをCSV、またはGoogleスプレッドシートに変換するための、きれいできれいなpythonicの方法を探しています。(データはチェックして修正する必要があります。これを行う人は何人かいます。Google ドキュメントは、バージョンの競合や同期の問題を引き起こすことなく、同じデータで作業するための唯一の迅速な方法です。)

多くのレコード (つまり、スプレッドシートの行) に空のフィールドがあるため、Dictwriter は面倒な方法のように思えます。

入力ファイルの形式がよりXMLっぽいので、XMLに変換してExcelに取り込み、Googleスプレッドシートとしてアップロードしようと考えています。

何か案は?

4

1 に答える 1

1

これを使って...

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,
于 2013-01-21T16:01:19.607 に答える