根据行值将CSV文件拆分为较小的文件

3

我有一个大的csv文件,包含以下列头:idtypestatelocation

以及以下数值:

124, preschool, Pennsylvania, Pittsburgh
421, secondary school, Ohio, Cleveland
213, primary school, California, Los Angeles
155, secondary school, Pennsylvania, Pittsburgh
etc...

这个文件没有排序,我想为每种类型的学校创建一个 CSV 文件。

我发现的答案都是关于有序的 CSV 文件或者在特定行数后拆分它们。

编辑: 我已经找到了我想要的:

import csv

csv_file = 'school.csv'
value = 'preschool'

with open(csv_file, 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in spamreader:
        if value in row:
            with open(value + '.csv', 'ab') as myfile:
                spamwriter = csv.writer(myfile)
                spamwriter.writerow(row)
                myfile.close()

我只需从原始表格中复制粘贴标题行即可保留标题列。

1
你好 Gabriel,欢迎来到本站。我不确定你具体想要什么,能否请你详细解释一下你想要发生什么,以及你已经尝试了哪些方法? - MackM
我有一个名为schools.csv的文件,其中包含学校的ID、学校类型、学校所在州和位置信息。该文件有30,000行,我想根据学校类型将其拆分成较小的文件。这是否是更好的问题标题?基于特定列中的值拆分文件? - monchisan
1个回答

0
你所需要的是一行比较。然后根据匹配将其附加到不同的文件中。
此外,try/except检查文件是否存在,如果不存在则写入标题。这是实现您要寻找的结果的最简单方法。您还可以进行比较,以确保文件存在时标题按您选择的方式格式化,但是这个答案已经远远超出了原始问题的范围。
import csv


csv_file = 'file/path/file_name'

values = ['preschool', 'secondary school']


def csv_header(x):
    with open(x + '.csv', 'ab') as myfile:
        myfile.write("%s %s %s %s \n" % ('id', 'type', 'state', 'location'))
        myfile.close()


def csv_writer(y, value):
    for row in y:
        if value in row:
            with open(value + '.csv', 'ab') as myfile:
                spamwriter = csv.writer(myfile)
                spamwriter.writerow(row)
                myfile.close()


def csv_reader(z):
    with open(z + '.csv', 'rb') as spam:
        spamreader = csv.reader(spam, delimiter=',', quotechar='|')
        csv_writer(spamreader, value)


for value in values:
    try:
        csv_reader(value)
        csv_reader(csv_file)

    except:
        csv_header(value)
        csv_reader(csv_file)

https://docs.python.org/2/library/csv.html


我需要使用哪个库?你能给我完整的代码吗? - monchisan
我编辑了一个完整的工作脚本,并包含了文档链接。 - user5780947
赶紧去获得一些声望点数吧,然后回来重新阅读这篇文章。很高兴我能帮到你。 - user5780947
你好。输出的 CSV 文件没有标题列,所有数据都在同一行上。类似这样:124,学前班,宾夕法尼亚州,匹兹堡,213,学前班,宾夕法尼亚州,匹兹堡 - monchisan
然后您需要编辑您发布的问题...它应该是类似于“如何根据行值将CSV拆分为子文件并在子CSV中不存在标题时编写标题?”...无论如何,我已经编辑了我的答案。 - user5780947
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接