2016-05-12 61 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