将csv文件拆分为多个文件

将csv文件拆分为多个文件,csv,split,Csv,Split,我有一个150500行的csv文件,我想将其拆分为包含500行(条目)的多个文件 我正在使用Jupyter,我知道如何打开和读取文件。但是,我不知道如何指定一个输出路径来记录新创建的文件,而不是拆分大文件 我在网上找到了这段代码,但又一次因为我不知道我的输出路径是什么,我不知道如何使用它。此外,对于这段代码,我不理解如何指定输入文件 导入操作系统 def拆分(filehandler,分隔符=',',行限制=1000, 输出\u name\u template='output\u%s.csv',o

我有一个150500行的csv文件,我想将其拆分为包含500行(条目)的多个文件

我正在使用Jupyter,我知道如何打开和读取文件。但是,我不知道如何指定一个输出路径来记录新创建的文件,而不是拆分大文件

我在网上找到了这段代码,但又一次因为我不知道我的输出路径是什么,我不知道如何使用它。此外,对于这段代码,我不理解如何指定输入文件

导入操作系统
def拆分(filehandler,分隔符=',',行限制=1000,
输出\u name\u template='output\u%s.csv',output\u path=',keep\u headers=True):
导入csv
reader=csv.reader(filehandler,delimiter=delimiter)
当前工件=1
当前路径=os.path.join(
输出路径,
输出\u名称\u模板%当前\u件
)
当前输出写入程序=csv.writer(打开(当前输出路径'w'),分隔符=delimiter)
当前限制=行限制
如果保留标题:
headers=reader.next()
当前\u out \u writer.writerow(标题)
对于i,枚举(读取器)中的行:
如果i+1>当前_限制:
当前_件+=1
当前限制=行限制*当前块
当前路径=os.path.join(
输出路径,
输出\u名称\u模板%当前\u件
)
当前输出写入程序=csv.writer(打开(当前输出路径'w'),分隔符=delimiter)
如果保留标题:
当前\u out \u writer.writerow(标题)
当前\u out \u writer.writerow(行)
我的文件名是DataSet2.csv,它与我正在运行的ipynb笔记本位于jupyter中的同一个文件中

number_of_small_files = 301
lines_per_small_file = 500

largeFile = open('large.csv', 'r')
header = largeFile.readline()

for i in range(number_of_small_files):
    smallFile = open(str(i) + '_small.csv', 'w')

    smallFile.write(header) # This line copies the header to all small files

    for x in range(lines_per_small_file):
        line = largeFile.readline()
        smallFile.write(line)

    smallFile.close()

largeFile.close()
这将在同一目录中创建许多小文件。大约301个。它们将从
0_small.csv
命名为
300_small.csv


这将在同一目录中创建许多小文件。大约301个。它们将使用标准unix实用程序从
0_small.csv
命名为
300_small.csv

cat DataSet2.csv | tail -n +2 | split -l 500 --additional-suffix=.csv output_

此管道获取原始文件,用“tail-n+2”去掉第一行,然后将其余部分拆分为500行数据块,这些数据块放入文件中,文件名以“output_u”开头,以“.csv”结尾,使用标准unix实用程序:

cat DataSet2.csv | tail -n +2 | split -l 500 --additional-suffix=.csv output_

此管道获取原始文件,用“tail-n+2”去掉第一行,然后将其余部分拆分为500行块,放入以“output_u”开头、以“.csv”结尾的文件中。

您发布的代码似乎与拆分行无关。Filehandler是open()的返回值。将其作为第一个参数发送到代码中。但是,这不是按行分割。我没有测试它,但是这段代码应该将文件分割成多个文件。我现在要去睡觉了,但我明天会再检查你是否有任何问题。使用open('DataSet2.csv',“r”)作为输入文件:对于范围内的I(int(150500/500)):使用open(str(I)+“_small.csv”,“w”)作为输出文件:lines=inputFile.readlines(500)outputFile.write(str(lines))这段代码确实创建了300个小文件,但是,它将它们保存在一行中。如何修改它,使其在前一行下添加每一新行?还有,我怎么能跳过我的大.csv文件中的第一行,因为那一行属于标题,它偏移了我希望在每个小文件中包含的500个数据点?非常感谢你的帮助,非常感谢!此外,我很抱歉,该文件有150500不包括标题。因此,对于标题,我有150501行,其中我想跳过第一行(标题),我的答案实际上是错误的。读取行(n)读取n个字符,而不是n行。我编辑了我的答案。这应该正确地将所有行写入单独的行中。这也会将标题复制到所有小文件。要停止此操作,请删除smallFile.write(标题)行。您发布的代码似乎与拆分行无关。Filehandler是open()的返回值。将其作为第一个参数发送到代码中。但是,这不是按行分割。我没有测试它,但是这段代码应该将文件分割成多个文件。我现在要去睡觉了,但我明天会再检查你是否有任何问题。使用open('DataSet2.csv',“r”)作为输入文件:对于范围内的I(int(150500/500)):使用open(str(I)+“_small.csv”,“w”)作为输出文件:lines=inputFile.readlines(500)outputFile.write(str(lines))这段代码确实创建了300个小文件,但是,它将它们保存在一行中。如何修改它,使其在前一行下添加每一新行?还有,我怎么能跳过我的大.csv文件中的第一行,因为那一行属于标题,它偏移了我希望在每个小文件中包含的500个数据点?非常感谢你的帮助,非常感谢!此外,我很抱歉,该文件有150500不包括标题。因此,对于标题,我有150501行,其中我想跳过第一行(标题),我的答案实际上是错误的。读取行(n)读取n个字符,而不是n行。我编辑了我的答案。这应该正确地将所有行写入单独的行中。这也会将标题复制到所有小文件。要停止此操作,请删除smallFile.write(标题)行。