我有一些代码可以下载自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)
这很好用,除了现在我想做同样但不同的状态。即我下载的文件看起来像这样:
现在看起来像这样:
因此,当我运行我的代码时,它会填满。
理想情况下,我希望它生成两个csv文件,一个名为VIC,所有VIC数据加入,一个名为QLD,所有QLD数据都已加入。但是我不知道如何修改我的代码来执行此操作?
所以,在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())
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。