首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据重组

数据重组
EN

Stack Overflow用户
提问于 2015-09-12 12:09:43
回答 1查看 164关注 0票数 0

我必须输入一个文本文件,其中包含分隔的逗号和行分隔的数据,格式如下:

代码语言:javascript
复制
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

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

我需要打印所有这一切在新的行与条件:1,3元素的每组,然后在一条新的行中的5个参数。因此,上述一套方案的解决办法如下:

代码语言:javascript
复制
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

我实现这一目标的职能如下:

代码语言:javascript
复制
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()

输出是错误的,在这些行的末尾有一个3行的空间,其长度为8。我怀疑应该归咎于writer_out.writerow(数组)。

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-12 12:14:54

嗯,你所用的逻辑最终会变得相当混乱。我会更多地按照这些路线(这取代了for循环)来做,这更像是Pythonic:

代码语言:javascript
复制
for line in reader_in:
    header = line[:3]
    for i in xrange(3, len(line), 5):
        writer_out.writerow(header + line[i:i+5])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32538612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档