2016-09-16 4 views
1

데이터 파일 (아래)을 구문 분석하여 특정 날짜 이전에 사용자가 시작한 행만 찾으려고 시도합니다. 다음CSV 파일의 행을 필터링 한 다음 열을 기준으로 정렬하십시오.

id, name, start_date, role, end_date, words 
657, mystical, 1351140260, cleaner, 1951140260, very lazy 
1987, kanyau, 1451189768, watchman, 1539742445, sleeping 

누구나 지원할 수 있습니다 (시작 날짜) 오름차순으로 이러한 행에서 단어 열에서 값을 주문?

P.S : newbie 여기 있지만 여기에 내가 놀아 왔던 것이 있습니다.

date_pivot = "6/09/2010 00:00:00" 
d = datetime.strptime(date_pivot, "%d/%m/%Y %H:%M:%S") 
date_pivot = time.mktime(d.timetuple()) 
dp = int(date_pivot) 
infile = csv.DictReader(open("sample_data.csv","rb"), delimiter=",") 
previous_users = [row for row in infile if row['start_date'] < 'dp'] 
#print previous_users 
with open('final_test.csv','wb') as fou: 
    dw = csv.DictWriter(fou, previous_users.keys()) 
    dw.writeheader() 
    dw.writerow(my_dict) 
+0

단어 열의 값에 시작일이 없으므로 (시작일 기준) 오름차순으로 단어 열의 값을 순서대로 정렬하십시오. 그들 모두를 위해 동일 할 것이다). 질문을 편집하고 일을 어떻게 정렬하고 재정렬했는지 설명하십시오. – martineau

답변

0

매우 간단해야합니다.

previous_users.sort(key=lambda row: int(row['start_date'])) 

참고 사항 : 당신이 변환을 입력해야하고 주요 기능에 대한 조회 않습니다 때문에, lambda는 간단하다 fieldName에로 DictWriterprevious_users.keys()를 전달하는 것은 이중으로 잘못된 것입니다. 하나는 previous_userslistdict이고 dict이 아니기 때문에 previous_users[0].keys() (비어 있지 않음을 확인한 후)을 수행해야합니다. 두 개의 dict에는 순서가 정의되어 있지 않으므로 출력 열이 재 배열됩니다. 그게 문제가되지 않는다면, 그렇게하십시오. 하지만 원하는 순서로 필드 이름을 명시 적으로 전달하거나 DictReader에서 올바른 순서로 필드 이름을 읽는 것이 좋습니다. csv.DictWriter(fou, infile.fieldnames)

추가 입력 오류 : 아마도 int(row['start_date']) < dp; int으로 변환해야하며 문자열 "dp"이 아닌 dp의 값과 비교하려고합니다.

관련 문제