加入约60个时间序列csv文件-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

加入约60个时间序列csv文件

一码平川MACHEL 2019-01-21 16:30:07 681

我有一些代码可以下载自2006年左右以来每个月的月度数据,因此需要相当数量的文件。然后我运行一些其他代码将所有月度文件连接到一个包含所有数据的大文件中(注意在第一个文件之后,它每次都删除标题):

from glob import glob
files = sorted(glob('*.csv'))

with open('VIC.csv', 'w') as fi_out:

for i, fname_in in enumerate(files):            
    with open(fname_in, 'r') as fi_in:               
        for i_line, line in enumerate(fi_in):
             (i_line > 0)
            if i_line > 0 or i == 0:
                fi_out.write(line)

这很好用,除了现在我想做同样但不同的状态。即我下载的文件看起来像这样:
1cMFS
现在看起来像这样:
0qRAI
因此,当我运行我的代码时,它会填满。

理想情况下,我希望它生成两个csv文件,一个名为VIC,所有VIC数据加入,一个名为QLD,所有QLD数据都已加入。但是我不知道如何修改我的代码来执行此操作?

分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:06

    所以,在botom是我改编的代码。首先,我拿了你的代码,并在一个名为的函数中重构它merge。此功能,与您通话与inputFiles和outputFileName。在您的第一种情况下,您将其称为:

    merge(sorted(glob('*.csv')), 'VIC.csv')

    现在你有2组数据。我们不是在所有.csv输入文件上调用它,而是仅在VIC.csv输入文件上调用它:

    merge(sorted(glob('*VIC1.csv')), 'VIC.csv')

    然后我们重复QLD文件。完整代码如下所示。

    from glob import glob

    def merge(inputFiles, outputFileName):

    with open(outputFileName, 'w') as fi_out:
        for i, fname_in in enumerate(inputFiles):            
            with open(fname_in, 'r') as fi_in:               
                for i_line, line in enumerate(fi_in):
                    (i_line > 0)
                    if i_line > 0 or i == 0:
                        fi_out.write(line)
    

    merge(sorted(glob('*VIC1.csv')), 'VIC.csv')
    merge(sorted(glob('*QLD1.csv')), 'QLD.csv')
    一个次要的重构,不需要跟踪正在处理的文件或行。

    def merge(inputFiles, outputFileName):

    inputFiles = iter(inputFiles)
    with open(outputFileName, 'w') as fi_out:
        #process the first file
        with open(next(inputFiles)) as first_file:
            fi_out = firstfile.read()
        #now just skip the first line in the other files
        for fname in inputFiles:            
            with open(fname_in, 'r') as fi_in:
                skip = next(f_in)
                fi_out.write(fi_in.read())
    0 0
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章