首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打开CSV文件并将每行写入新的动态命名CSV文件。

打开CSV文件并将每行写入新的动态命名CSV文件。
EN

Stack Overflow用户
提问于 2017-05-13 12:24:14
回答 3查看 3.7K关注 0票数 1

我有一个csv文件,比如50行数据,我想将它分割成每个行的单独csv文件,其中包括第一行(头)和相关的行。

文件1包含: row1,row2,文件2包含: row1,row3,文件3包含: row1,row4

诸若此类。

目前与以下方面合作:

代码语言:javascript
运行
复制
import csv

counter = 1

with open('mock_data.csv', 'r', newline='') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        filename = "file_%s" % str(counter)
        with open(filename, 'w') as csvfile_out:
            writer = csv.writer(csvfile_out)
            writer.writerow(row)
            counter = counter + 1

我现在得到的'csvfile_out‘没有定义。

( a)我是否正确地接近了这个( b)为什么没有定义csvfile_out?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-13 12:35:01

我试过了,对你来说效果很好。不幸的是,在我的Python2.7.12控制台中,我没有得到任何csvfile_out error,使用语句的也没有正确工作。

代码语言:javascript
运行
复制
import csv

counter = 1

with open('mock_data.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    row1 = next(reader) # here you save your first line of the .csv file
    for row in reader:
        if row: # if row is not empty, write a file with this row
            filename = "file_%s" % str(counter)
            with open(filename, 'w') as csvfile_out:
                writer = csv.writer(csvfile_out)
                writer.writerow(row1) #here you write your row1 as first row of csvfile_out
                writer.writerow(row)
                counter = counter + 1
票数 1
EN

Stack Overflow用户

发布于 2017-05-13 12:42:02

下面是一个使用pandas的解决方案。假设csv的内容如下:

代码语言:javascript
运行
复制
Name, Age, Gender
John, 20, Male
Jack, 22, Male
Jill, 18, Female

我的代码如下:

代码语言:javascript
运行
复制
import pandas as pd
df = pd.read_csv("mock_data.csv")

for index, row in df.iterrows():
    file_name = row['Name']+".csv"  #Change the column name accordingly
    pd.DataFrame(row).T.to_csv(file_name, index=None)

这将根据列"Name“(即Jack、John和Jill)的值创建文件名,以生成三个文件John.csvJack.csvJill.csvJohn.csv的内容如下:

代码语言:javascript
运行
复制
Name    | Age   |  Gender |
---------------------------
John    | 20    |  Male   |

Jack.csv的内容如下:

代码语言:javascript
运行
复制
Name    | Age   |  Gender |
---------------------------
Jack    | 22    |  Male   |

Jill.csv的内容如下:

代码语言:javascript
运行
复制
Name    | Age   |  Gender |
---------------------------
Jill    | 20    |  Female   |

P.S:如果您不想要标题,只需在调用.to_csv()函数时添加header = None即可。例如:

代码语言:javascript
运行
复制
pd.DataFrame(row).T.to_csv(file_name, index=None, Header=None)
票数 1
EN

Stack Overflow用户

发布于 2017-05-13 12:49:10

你也可以用DictReader ..。

代码语言:javascript
运行
复制
import csv

counter = 1

with open('mock_data.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        filename = "file_%s" % str(counter)
        with open(filename, 'w') as csvfile_out:
        writer = csv.DictWriter(csvfile_out, fieldnames=reader.fieldnames)
        headers = dict((n, n) for n in reader.fieldnames)
        writer.writerow(headers)
        writer.writerow(row)
        counter = counter + 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43953128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档