我有一个csv文件,比如50行数据,我想将它分割成每个行的单独csv文件,其中包括第一行(头)和相关的行。
文件1包含: row1,row2,文件2包含: row1,row3,文件3包含: row1,row4
诸若此类。
目前与以下方面合作:
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?
发布于 2017-05-13 12:35:01
我试过了,对你来说效果很好。不幸的是,在我的Python2.7.12控制台中,我没有得到任何csvfile_out error,使用语句的也没有正确工作。
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发布于 2017-05-13 12:42:02
下面是一个使用pandas的解决方案。假设csv的内容如下:
Name, Age, Gender
John, 20, Male
Jack, 22, Male
Jill, 18, Female我的代码如下:
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.csv、Jack.csv和Jill.csv。John.csv的内容如下:
Name | Age | Gender |
---------------------------
John | 20 | Male |Jack.csv的内容如下:
Name | Age | Gender |
---------------------------
Jack | 22 | Male |Jill.csv的内容如下:
Name | Age | Gender |
---------------------------
Jill | 20 | Female |P.S:如果您不想要标题,只需在调用.to_csv()函数时添加header = None即可。例如:
pd.DataFrame(row).T.to_csv(file_name, index=None, Header=None)发布于 2017-05-13 12:49:10
你也可以用DictReader ..。
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 + 1https://stackoverflow.com/questions/43953128
复制相似问题