行标签到多列文件中的列

时间:2017-05-17 15:16:07

标签: python python-2.7 jython-2.7

我是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

但我正在努力将“帐户”列(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

非常感谢任何建议。

1 个答案:

答案 0 :(得分: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 = {}
  

<强>输出
  UD1,UD2,UD3,周期,数量,销售成本,周转
  032074 ,,,, 40.91,-7488.36,505.73
  032075 ,,,, 40.91,-7488.36,505.73

使用Python测试:3.4.2

  

了解
  Python»3.6.1文档csv.DictWriter