2017-10-06 5 views
-2

사용하여 CSV에서 워크 데이 데이터 선택 :내 데이터와 같은 포맷 파이썬

Username, Timestamp, Text 
Joe Bloggs, Thu Oct 5 09:00:00 +0000 2017, Starting work 
Jane Doe, Fri Oct 7 18:00:00 +0000 2017, Finished work 
Tom Smith, Sat Oct 8 04:00:00 +0000 2017, Still coding this thing 

이 같은 5M 행의 CSV를, 그리고 9 시부 터 오후 5 시까 지 월 - 금 내에서 단지들을 추출하고 싶습니다 .

더미 데이터와 행 단위 추출에 대한 게시물을 많이 읽었지만 전체적으로 데이터 세트를 실제로 필터링하고 예제가 불완전하거나 비 전문가에게 혼란을주었습니다.

편집 : 대답에 대한 @ivan7707

감사합니다. 여기 내 완성 된 코드가 있습니다. 처음에는 아무 것도 포함시키지 않았습니다. 코드가 크게 잘못되었음을 알고있었습니다.

import csv 
from datetime import datetime 
main_file = csv.DictReader(open("source.csv","rb")) 
for row in main_file: #points to csv 
    username = row['Username'] 
    text = row['Text'] 
    timestamp = row['Timestamp'] 

    #Convert timestamp to useable format 
    timestamp = timestamp.split() 
    timestamp = (timestamp[2] + "-" + timestamp[1] + "-" + timestamp[5] + " " + timestamp[3]) 
    dt = datetime.strptime(timestamp, "%d-%b-%Y %H:%M:%S") 

    if dt.isoweekday() in range(1, 6): #If day is Mon-Fri  
     if dt.hour in range(9, 17): #If hour is 9am-5pm 
      output_file.writerow([username,text,timestamp]) #Save 

편집 2 (. 난 그렇게 분할에 의지 %의 Z에 문제가되었다) : 대화 ivan7707 다음

내가 코멘트에 있었다, 여기에 주 번호를 추가하는 코드입니다 데이터에 : 매주 스크립트에 대한

import csv 
from datetime import datetime 
main_file = csv.DictReader(open("source.csv","rb")) 
for row in main_file: 
    username = row['Username'] 
    text = row['Text'] 
    timestamp = row['Timestamp'] 

    #Convert timestamp to usable format as it was erroring with %z (+0000 part) 
    timestamp = timestamp.split() 
    timestamp = (timestamp[2] + "-" + timestamp[1] + "-" + timestamp[5] + " " + timestamp[3]) 
    dt = datetime.strptime(timestamp, "%d-%b-%Y %H:%M:%S") 

    #Check if timestamp is within Mon-Fri 9am-5pm 
    if dt.isoweekday() in range(1, 6): #Mon-Fri 
     if dt.hour in range(9, 17): #9am-5pm     
      weekday_list.append(week) 
      output_file.writerow([username,text,timestamp,week]) #Writes to csv 

    #Handy bit to iterate one week per 5 business days   
    elif dt.isoweekday() == 7: 
     if len(weekday_list) > 1: 
      weekday_list = [] 
      week += 1 

출력

+0

좋은 소리 포함되지 않는 범위 내에서 올바른 번호를 알고 있어야합니다. 왜 당신은 그것에 총을 맞고, 당신이 당신의 시도에 대해 가지고있는 어떤 특정한 문제를 사용하기 위해 다시 돌아 오지 않으면 우리는 기꺼이 도와 줄 것입니다. –

+0

응답 해 주셔서 감사합니다. 나는 아래의 ivan7707 덕분에 문제를 해결했습니다. 비록 매주와 매월마다 CSV를 저장하는 것이 도움이된다면 정말 도움이 될 것입니다. –

답변

0

파이썬의 datetime module은 귀하의 친구입니다. 이것은 당신을 가게하기에 충분합니다.

예 :

from datetime import datetime 


dt = datetime.strptime("21/11/06 16:59", "%d/%m/%y %H:%M") 

if dt.isoweekday() in range(1, 6): 
    print('weekday') 

if dt.hour in range(9, 17:00): 
    print('working time') 

Good stack overflow answer

+0

예를 들어 주셔서 감사합니다.이 두 명령 (.isoweekday() 및 .hour)은 필자가 필요로하는 모든 것이었지만 나에게있어서 찾을 수 없었습니다. –

+0

매주 및 매월 이후에 csv를 저장하기 위해이를 조정하는 방법에 대한 단서가 있습니까? –

+0

@NickB, 안녕하세요 닉, 알아낼 수있어서 기쁩니다. 이 질문에 대한 답변이 있으면 그 것으로 표시하십시오. 당신이 찾고있는 것은 업무를 어떻게 계획 할 것인가입니다. Windows에서는 작업 스케줄러를 사용하여 스케줄에 따라 실행해야하는 스크립트를 실행합니다. 리눅스에서는 cron 작업이 그 길이다. 문제가있는 경우 별도의 질문으로 설정해야합니다. – ivan7707