2016-05-12 22 views
1

每当“呼叫解决时间”列中有新的月份时,我想要在该月份和年份创建新的csv文件。并且将包含该月份和年份的所有行都过滤到新的csv中。按月过滤CSV并使用该月份数据创建新的csv

像这样:

alldata.csv

Call Resolve Time Priority Overall Result 
8/6/2015     P4 F 
5/13/2015     P4 F 
4/28/2015     P4 P 
5/13/2015     P4 F 
5/27/2015     P4 F 

新文件月-2015.csvalldata.csv创造了5/XX/2015只数据

Call Resolve Time Priority Overall Result 
    5/13/2015     P4 F 
    5/13/2015     P4 F 
    5/27/2015     P4 F 

到目前为止,我有这个,但我必须创造一些手动每年和每月:

reader = csv.reader(open(r"alldata.csv"), delimiter=',') 
filtered = filter(lambda p: '5/27/15' == p[1], reader) 
csv.writer(open(r"May-2015.csv",'w'),delimiter=',').writerows(filtered) 

编辑---------------------------------- -----------------------------------------

# say, reader is the reader object 
# do next(reader) to skip the headings 
import csv 
from itertools import groupby 

reader = csv.reader(open(r"alldata.csv"), delimiter=',') 

def by_month (row): 
    date = row[7] 
    month = int(date.split("/", 1)[0]) 
    return month 

m_g = groupby(reader, by_month) 

for month, group in m_g: 
    group = list(group) 
    # use a month to month_name map 
    with open('{}.csv'.format(month), 'w') as fw: 
     w = csv.writer(fw) 
     w.writerows(group) 

手动添加日期:

def by_month(row): 
    date = '5/9/2016' 
    month = int(date.split("/", 1)[0]) 
    return month 

回答

1

尝试以下,

# say, reader is the reader object 
# do next(reader) to skip the headings 
from itertools import groupby 
def by_month(row): 
    date = row[0] 
    month = int(date.split("/", 1)[0]) 
    return month 

m_g = groupby(reader, by_month) 

for month, group in m_g: 
    group = list(group) 
    # use a month to month_name map 
    with open('{}.csv'.format(month), 'w') as fw: 
     w = csv.writer(fw) 
     w.writerows(group) 

评论是否有问题。

+0

谢谢,它给了我一个“IndexError:列表索引超出范围”。我定义了读者并检查了它是从右边一排拉出的。在第16行,在 group = list(group)line 9,in_month date = row [7]' – iOSecure

+0

@iOSecure'row [7]'??? !!我写了'row [0]' –

+0

@C Panda我已经缩短了纸张,在第7行的实际纸张上缩短了。不知道这是否是更改的正确区域 – iOSecure