1

我是 Python 新手,正在使用 2.7.1 版作为 Hyperion FDMEE 的一部分。我有一个文件,我需要对列进行重新排序,并将一列拆分为 3 作为同一文件的一部分。

源文件;

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

但我正在努力将 Account 列(QTY、COGS、TURNOVER)转换为单独的列,如下例所示;

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

任何建议将不胜感激。

4

1 回答 1

0

使用 a 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 = {}

输出:
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

阅读
Python » 3.6.1 文档csv.DictWriter

于 2017-05-17T19:49:26.597 回答