1

CSV ファイルの特定の値からタブ区切りファイルを作成する作業を行っています。CSV ファイルには先月のすべての注文が含まれており、現在使用している会計ソフトウェアにインポートできるように正しくフォーマットする必要があります。CSV ファイルからのデータのサンプルを次に示します。

Customer    Order Number    Item Line Number    Quantity    Product Description

cust1       Order #1                1               40              desc1
cust1       Order #2                1               101             desc2
cust2       Order #3                1               3               desc3
cust2       Order #3                2               8               desc3
cust2       Order #3                3               8               desc3
cust1       Order #4                1               75              desc4

ここで、各シリーズについてOrder Number、次のような TDV ファイルのセクションを作成する必要があります: (括弧は無視してください。これらは値が上から来る場所を示すためのものです)

1       cust1           HA5ZV1          Desc1           Due Date        ...
2       1 (Item #)      40 (Qty)        ...             ...             ...

1       cust1           HA6A17          Desc2           Due Date        ...
2       1 (Item #)      101 (Qty)       ...             ...             ...

1       cust2           HA6AM1          Desc3           Due Date        ...
2       1 (Item #)      3 (Qty)         ...             ...             ...
2       2 (Item #)      8 (Qty)         ...             ...             ...
2       3 (Item #)      8 (Qty)         ...             ...             ...

うまくいけば、これは理にかなっています。これまでに行ったことは、元の CSV ファイルから辞書を作成することですが、辞書をループしてヘッダー (「1」でマークされた行) を 1 回書き込み、値を書き込む方法について混乱しています。 (「2」でマークされた行)同じものが表示されるたびにOrder Number。これまでの私のコードは次のとおりです。

data = csv.reader(open(import_dir))
fields = data.next()
new_file = export_dir+os.path.basename(import_dir)
tab_file = open(export_dir+os.path.basename(import_dir), 'a+')
for row in data:
    items = zip(fields, row)
    item = {}
    for (name, value) in items:
        item[name] = value.strip()
    tab_file.write('1\t'+item['Customer']+'\t'+item['Order Number']+'\t'
                   +item['Product Description']+'\t'+item['Due Date']+'\n'+
                   '2\t'+item['Item Line Number']+'\t'+item['Quantity']+'\t'+
                   ...

ただし、このコードは、ヘッダー データを各注文の最初だけに配置するのではなく、各明細項目の前に配置します。すべての顧客が 1 つのアイテムのみを注文した場合は問題ありませんが、一部の注文には複数の品目があるため、フォーマットが台無しになります。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです. ありがとう!

4

1 に答える 1

0
于 2013-06-04T19:49:39.073 に答える