加入大约 60 个时间序列 csv 文件
join together about 60 time series csv files
我有一些代码可以下载大约自 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)
这很好用,除了现在我想对不同的状态做同样的事情。
IE。在我下载的文件看起来像这样之前:
现在看起来像这样:
所以当我 运行 我的代码时,它塞满了。
理想情况下,我希望它制作两个 csv 文件,一个名为 VIC,其中包含所有 VIC 数据,另一个名为 QLD,其中包含所有 QLD 数据。但是我不确定如何修改我的代码来执行此操作?
如有任何帮助,我们将不胜感激。
所以,最下面是我改编的代码。首先,我获取了您的代码,并在名为 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())
我有一些代码可以下载大约自 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)
这很好用,除了现在我想对不同的状态做同样的事情。 IE。在我下载的文件看起来像这样之前:
现在看起来像这样:
所以当我 运行 我的代码时,它塞满了。
理想情况下,我希望它制作两个 csv 文件,一个名为 VIC,其中包含所有 VIC 数据,另一个名为 QLD,其中包含所有 QLD 数据。但是我不确定如何修改我的代码来执行此操作?
如有任何帮助,我们将不胜感激。
所以,最下面是我改编的代码。首先,我获取了您的代码,并在名为 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())