Python 多列文件中列的行标签

Python 多列文件中列的行标签,python,python-2.7,jython-2.7,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;

我是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列(数量、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

如果您有任何建议,我们将不胜感激。

请使用
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.36505.73
032075、、、40.91、-7488.36505.73

使用Python:3.4.2测试

阅读有关
Python»3.6.1文档


使用
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.36505.73
032075、、、40.91、-7488.36505.73

使用Python:3.4.2测试

阅读有关
Python»3.6.1文档


谢谢你的帮助。我得到以下错误;语法错误:不匹配的字符“\n”应为“”。我猜它在某个地方读到了换行符。我试图修改header元素以删除\n元素,但没有成功。谢谢stovfl。我实际上是有问题的标题部分,在原来的和不得不改变原来的代码;header=infle.readline()[:-1]。拆分(“;”)header.append(‘数量’)header.append(‘COGS’)header.append(‘营业额’)效果很好,然后去掉了金额列(不再需要),但您列出的方法更有意义。其余的一切都很好,更新了它以读取/写入我需要的文件,并进行了一些格式更改。我开始喜欢python作为一种语言:)谢谢你的帮助。我得到以下错误;语法错误:不匹配的字符“\n”应为“”。我猜它在某个地方读到了换行符。我试图修改header元素以删除\n元素,但没有成功。谢谢stovfl。我实际上是有问题的标题部分,在原来的和不得不改变原来的代码;header=infle.readline()[:-1]。拆分(“;”)header.append(‘数量’)header.append(‘COGS’)header.append(‘营业额’)效果很好,然后去掉了金额列(不再需要),但您列出的方法更有意义。其余的一切都很好,更新了它以读取/写入我需要的文件,并进行了一些格式更改。我开始喜欢python作为一种语言:)