2016-03-11 41 views
0

我有一個包含各種列的CSV樣本,我必須從給出的date列中提取平日。樣本如下所示:Python:如何從CSV獲取工作日?

Name,Birthdate,Age,Address 
ABC,3-10-2016 11:00:00AM,21,XYZ Street 21 zone 
BCD,3-11-2016 15:54:00PM,22,WXY Street 21/A, S zone 
CDW,4-11-2015 21:09:00PM,22,ZYX Street 21Avenue, North Zone 

我想讀的CSV並提取日期,以確定給定日期列平日

到目前爲止,我已經創建了一個代碼讀取CSV並獲得工作日,但我無法在任何其他CSV上實現它。

的代碼如下:

import csv 
from datetime import datetime as dt 
with open('date.csv', 'r') as f: 
    f.readline() 

    for line in f: 
    date = dt.strptime(line.strip(), '%m-%d-%Y %H:%M:%S').strftime('%A') 
    print date 

請幫我在這裏,因爲這是我學術研究的一部分。

注:如果問題不清楚,請讓我知道。 :)

回答

4

使用csv module來讀取CSV文件,然後解析一列。既然你有頭文件,它會是最容易使用的DictReader()方法在這裏:

import csv 
from datetime import datetime 


with open(filename, 'rb') as infile: 
    reader = csv.DictReader(infile) 
    for row in reader: 
     birthdate = row['Birthdate'] # keys are named in the first row of your CSV 
     birthdate = datetime.strptime(birthdate, '%m-%d-%Y %H:%M:%S') 
     print birthdate.strftime('%A') 
+0

dictreader必須定義吧? –

+0

@ desmond.carros:對不起,我忘記在那裏包含模塊名稱;它是'csv'模塊爲您提供的一個類。 –

+0

嗯,我只是指出。感謝您的解決方案:) –

2

。利用您導入作爲csv庫如下:

from datetime import datetime as dt   
import csv 

with open('date.csv', 'rb') as f_input: 
    csv_input = csv.reader(f_input) 
    header = next(csv_input) 

    for row in csv_input: 
     print dt.strptime(row[1], '%m-%d-%Y %H:%M:%S%p').strftime('%A') 

這將打印:

Thursday 
Friday 
Saturday   

這會自動讀取csv文件中的每一行作爲單元格列表。因此,在這種情況下,您可以使用row[1]訪問第二列,並將其傳遞給您的strptime函數以獲取星期幾。

+0

這只是一個示例。原始數據可能包含任何地方的日期列。 –

+0

假設您可以使用相同的標頭值識別位置,那麼DictReader方法將是最好的。否則,您需要使用正則表達式來嘗試猜測數據在哪裏。 –

1

試試這個:

import re 
from datetime import datetime as dt 

test_str = open('date.csv').read() 
p = re.compile(ur'\w+,(\d+-\d+-\d+\s\d+:\d+:\d+\w{2})') 
m = re.findall(p, test_str) 
for i in m: 
    print dt.strptime(i, '%m-%d-%Y %H:%M:%S%p').strftime('%A') 

輸入:

Name,Birthdate,Age,Address 
ABC,3-10-2016 11:00:00AM,21,XYZ Street 21 zone 
BCD,3-11-2016 15:54:00PM,22,WXY Street 21/A, S zone 
CDW,4-11-2015 21:09:00PM,22,ZYX Street 21Avenue, North Zone 

輸出:

Thursday 
Friday 
Saturday 
+0

很好的使用正則表達式。我將使用這個解決方案的短代碼。感謝Tim007 :) –

+0

在我的原始數據中,我有幾個日期列,但這個正則表達式會吸收所有日期格式,並返回所有日期的日期。任何調整來控制這個? –

+0

@ desmond.carros你可以發佈示例輸入嗎? –