2017-05-17 1 views
1

私はPythonを初めて使用しており、Hyperion FDMEEの一部としてバージョン2.7.1を使用しています。 私は、列を並べ替える必要があるファイルを持っている、同じファイルの一部として3に1つの列を分割します。マルチカラムファイルの列への行の表示

ソースファイル。

ACCOUNT;UD1;UD2;UD3;PERIOD;PERIOD;AMOUNT 
QTY;032074;99953;53;2017.07.31;2017.07.31;40.91 
COGS;032074;99953;53;2017.07.31;2017.07.31;-7488.36 
TURNOVER;032074;99953;53;2017.07.31;2017.07.31;505.73 
QTY;032075;99960;60;2017.07.31;2017.07.31;40.91 
COGS;032075;99960;60;2017.07.31;2017.07.31;-7488.36 
TURNOVER;032075;99960;60;2017.07.31;2017.07.31;505.73 

私はこのスクリプトごとに列を並べ替えることができました。

infilename = fdmContext["OUTBOXDIR"]+"/Targit_1707.dat" 
outfilename = fdmContext["OUTBOXDIR"]+"/TargitExport.csv" 

import csv 

infile = open(infilename, 'r') 
outfile = open(outfilename, 'w+') 

for line in infile: 
    column = line.split(';') 


    outfile.write(column[1] + ";" + column[2] + ";" + column[3] + ";" + column[4] + ";" + column[0] + ";" + str(column[6].strip('\n')) + ";201701" + "\n") 


outfile.close() 
infile.close() 

結果を生成します。

UD1;UD2;UD3;PERIOD;ACCOUNT;AMOUNT;201701 
032074;99953;53;2017.07.31;QTY;40.91;201701 
032074;99953;53;2017.07.31;COGS;-7488.36;201701 
032074;99953;53;2017.07.31;TURNOVER;505.73;201701 
032075;99960;60;2017.07.31;QTY;40.91;201701 
032075;99960;60;2017.07.31;COGS;-7488.36;201701 
032075;99960;60;2017.07.31;TURNOVER;505.73;201701 

が、私は以下の例のように別々の列にアカウント列(QTY、COGS、回転率)移調するために苦労しています。

UD1;UD2;UD3;PERIOD;QTY;COGS;TURNOVER;201701 
032074;99953;53;2017.07.31;40.91;-7488.36;505.73;201701 
032075;99960;60;2017.07.31;40.91;-7488.36;505.73;201701 

ご意見をいただければ幸いです。

答えて

0

は、例えば、dictを使用します。

import csv 

fieldnames = infile.readline()[:-1] 
fieldnames = fieldnames.split(';')[1:5] + ['QTY', 'COGS', 'TURNOVER'] 

writer = csv.DictWriter(outfile, fieldnames=fieldnames) 
writer.writeheader() 

record_dict = {} 
for i, line in enumerate(infile): 
    if not line: break 

    line = line[:-1].split(';') 

    # Assign column data every 1,2,3 lines 
    mod_row = (i % 3)+1 

    if mod_row == 1: 
     record_dict['QTY'] = line[6] 
     record_dict['UD1'] = line[1] 
     # ... and so on 
    if mod_row == 2: 
     record_dict['COGS'] = line[6] 
    if mod_row == 3: 
     record_dict['TURNOVER'] = line[6] 

     writer.writerow(record_dict) 
     record_dict = {} 

Output:
UD1,UD2,UD3,PERIOD,QTY,COGS,TURNOVER
032074,,,,40.91,-7488.36,505.73
032075,,,,40.91,-7488.36,505.73

のPythonでテスト:あなたの助けのための3.4.2

Read about:
Python » 3.6.1 Documentation csv.DictWriter

+0

感謝を。私は次のエラーを受け取ります。 SyntaxError: '' 'が必要な文字' \ n 'が一致しません。どこかで改行を読んでいると思います。 \ n要素を取り除くためにヘッダ要素を修正しようとしましたが、無駄です。 – PaulShanahan

+0

ありがとうございます。私は実際にオリジナルのヘッダーセクションに問題があり、元のコードを変更する必要がありました。 header_append( 'COGS') header.append( 'TURNOVER') 正常に動作した(必要でなくなった)分量列を取り除きましたが、あなたが列挙した方法がはるかに理にかなっています。 残りのすべては問題なく、必要なファイルを読み書きするように更新されました。私は言語としてのPythonを好きに始めている:) – PaulShanahan

+0

vote and accepted all done!ヘルプをよろしくお願いいたします。 – PaulShanahan

関連する問題