用 header 将 csv 拆分成多个部分并附加 csv 文件
Split csv into pieces with header and attach csv files
我有一个如下所示的 CSV 文件:
这是一个简化的例子。我的原始 CSV 包含数千行。现在我的目标是将这个 CSV 分成不同的小块。但是,我想在每个文件中都有 header 并且 header 由前 8 行组成,第 9 行包含一个空行,这也属于 header.
由于我对数据不感兴趣,只是裁剪它,所以我试图找到一种快速且不涉及任何数据修改的解决方案。我不想使用 Pandas。我想避免使用 csv
模块进行读写,但我也尝试使用 的答案中提到的实现。这里的问题是我的 header 不只是一行,而是总共 9 行。而且我想避免读取和写入数据,因为我实际上只需要切割它。
我尝试使用 islice
。
第一个 CSV 可以创建如下:
from itertools import islice
with open(r"C:\Desktop\myfolder\mycsv.csv") as f, open (r"C:\Desktop\myfolder\out.csv", "w") as out:
r = islice(f, 0, 12)
out.writelines(r)
这给出了我的第一个 CSV,包含 12 行(我认为),包括 header。现在我不知道如何以包含第 13 行数据的方式剪切我的第二个文件,直到让我们说第 20 行,但包括 header。我不确定 islice
是否可以做到这一点。我知道如何通过设置开始和停止 islice(f, 13 20)
来获取数据,但是 header 不见了。我还考虑过剪切一个文件,header,然后是数据文件并附加它们。但是我找不到一种方法来附加两个 CSV,而不必读写或使用 pandas.
我会尝试这样的事情:
- 逐行读取文件
- 记住 header 行
- 在需要时启动一个新的输出文件,并且每次都在前面添加 header 行
代码:
a.csv:
c1 c2
c3 c4
d1 d2
d3 d4
d5 d6
d7 d8
script.py:
with open("a.csv", "r") as inp:
header = []
headersize = 3
for _ in range(0, headersize):
header.append(inp.readline())
filenumber = 1
chunksize = 2
dataline = inp.readline()
while dataline != "":
with open("a_" + str(filenumber) + ".csv", "w") as outp:
for headerline in header:
outp.write(headerline)
for _ in range(0, chunksize):
outp.write(dataline)
dataline = inp.readline()
filenumber += 1
a_1.csv:
c1 c2
c3 c4
d1 d2
d3 d4
a_2.csv:
c1 c2
c3 c4
d5 d6
d7 d8
除了使用固定的块大小,您还可以实施任何其他条件来启动新文件。
我有一个如下所示的 CSV 文件:
这是一个简化的例子。我的原始 CSV 包含数千行。现在我的目标是将这个 CSV 分成不同的小块。但是,我想在每个文件中都有 header 并且 header 由前 8 行组成,第 9 行包含一个空行,这也属于 header.
由于我对数据不感兴趣,只是裁剪它,所以我试图找到一种快速且不涉及任何数据修改的解决方案。我不想使用 Pandas。我想避免使用 csv
模块进行读写,但我也尝试使用
我尝试使用 islice
。
第一个 CSV 可以创建如下:
from itertools import islice
with open(r"C:\Desktop\myfolder\mycsv.csv") as f, open (r"C:\Desktop\myfolder\out.csv", "w") as out:
r = islice(f, 0, 12)
out.writelines(r)
这给出了我的第一个 CSV,包含 12 行(我认为),包括 header。现在我不知道如何以包含第 13 行数据的方式剪切我的第二个文件,直到让我们说第 20 行,但包括 header。我不确定 islice
是否可以做到这一点。我知道如何通过设置开始和停止 islice(f, 13 20)
来获取数据,但是 header 不见了。我还考虑过剪切一个文件,header,然后是数据文件并附加它们。但是我找不到一种方法来附加两个 CSV,而不必读写或使用 pandas.
我会尝试这样的事情:
- 逐行读取文件
- 记住 header 行
- 在需要时启动一个新的输出文件,并且每次都在前面添加 header 行
代码:
a.csv:
c1 c2
c3 c4
d1 d2
d3 d4
d5 d6
d7 d8
script.py:
with open("a.csv", "r") as inp:
header = []
headersize = 3
for _ in range(0, headersize):
header.append(inp.readline())
filenumber = 1
chunksize = 2
dataline = inp.readline()
while dataline != "":
with open("a_" + str(filenumber) + ".csv", "w") as outp:
for headerline in header:
outp.write(headerline)
for _ in range(0, chunksize):
outp.write(dataline)
dataline = inp.readline()
filenumber += 1
a_1.csv:
c1 c2
c3 c4
d1 d2
d3 d4
a_2.csv:
c1 c2
c3 c4
d5 d6
d7 d8
除了使用固定的块大小,您还可以实施任何其他条件来启动新文件。