重组数据

时间:2015-09-12 12:09:44

标签: python file

我必须以下列格式输入包含逗号分隔和行分隔数据的文本文件:

A002,R051,02-00-00,05-21-11,00:00:00,REGULAR,003169391,001097585,05-21-11,04:00:00,REGULAR,003169415,001097588,05-21-11,08:00:00,REGULAR,003169431,001097607

文本文件中存在多组此类数据

我需要使用以下条件在新行中打印所有这些: 每组中的前3个元素后跟新行中的5个参数。因此上述集合的解决方案将是:

A002,R051,02-00-00,05-21-11,00:00:00,REGULAR,003169391,001097585
A002,R051,02-00-00,05-21-11,04:00:00,REGULAR,003169415,001097588
A002,R051,02-00-00,05-21-11,08:00:00,REGULAR,003169431,001097607

我实现它的功能如下:

def fix_turnstile_data(filenames):    
    for name in filenames:
        f_in = open(name, 'r')
        reader_in = csv.reader(f_in, delimiter = ',')
        f_out = open('updated_' + name, 'w')
        writer_out = csv.writer(f_out, delimiter = ',')

        array=[]
        for line in reader_in:
            i = 0
            j = -1 
            while i < len(line):
                if i % 8 == 0:
                    i+=2
                    j+=1
                    del array[:]
                    array.append(line[0])
                    array.append(line[1])
                    array.append(line[2])

                elif (i+1) % 8 == 0:
                    array.append(line[i-3*j])
                    writer_out.writerow(array)

                else:
                    array.append(line[i-3*j])

                i+=1

        f_in.close()
        f_out.close()

输出错误,并且在长度为8的那些行的末尾有3行的空格。我怀疑它可能是责备的writer_out.writerow(数组)。

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

嗯,你使用的逻辑最终会让人感到困惑。我在这些方面做了更多(这取代了你的for循环),这更像是Pythonic:

for line in reader_in:
    header = line[:3]
    for i in xrange(3, len(line), 5):
        writer_out.writerow(header + line[i:i+5])