원시 데이터를 가져 와서 열을 재정렬하고, 여러 파일의 데이터를 기반으로 데이터를 추가하고, 하드 코딩 된 데이터를 추가 한 다음 "output.csv"파일에 저장합니다. 예를 들어파이썬을 사용하여 여러 파일의 데이터를 기반으로 csv 파일에 열을 추가 하시겠습니까?
...
File1.csv : (검색된 데이터)
사람, DATE_TIME, 사이트, 상태
Person1,01/13/16 10:38,SiteA,I
Person1,01/20/16 12:53,SiteC,O
Person2,01/21/16 14:45,SiteB,O
Person3,01/17/16 12:17,SiteA,I
Person3,01/25/16 10:15,SiteB,L
File2.csv : (고정 데이터 1)
사이트, 코드
SiteA,101
SiteB,102
SiteC,103
File3.csv : (고정 데이터 2)
,period_start_time, period_end_time 기간을 File1 원시 데이터가
00:00,07:59,0
08:00,09:00,1
09:01,10:00,2
10:01,11:00,3
11:01,12:00,4
12:01,13:00,5
13:01,14:00,6
14:01,15:00,7
15:01,23:59,X
.
마지막 열에는 "I", "O"및 "L"이 있습니다.
"I"는 IN을 나타냅니다.
"O"는 OUT을 나타냅니다.
"L"은 LATE를 나타냅니다. 그들은 "L"또는 LATE 그들은 여전히려고하는 경우에
이 예제에서 또는 사이트 A, B 또는 C
주, 외가 세 학생들이있다.
File2에는 "사이트 코드"가 있습니다.
File3에는 period_start_time을 나타내는 첫 번째 열이 있고 두 번째 열은 period_end_time입니다.
세 번째 열은 마침표입니다.
은 내가 output.csv 파일을 작성해야합니다
는 어디, 누구를, 기간, 날짜, TIME_IN, TIME_OUT, USERNAME은 =이 필요
이있는 File2에서 해당 사이트 코드가 될 수 있습니다.
WHOM =은 사람입니다.
PERIOD = 시간이 10:38이면 파일 3에 의해 주어진 기간은 "3"입니다.
DATE = 시간을 'mm/dd/yy'로 표시하십시오.
TIME_IN = 상태가 "I"또는 "L"인 경우 시간을 'HH : MM'으로 표시하고, 그렇지 않으면 공란으로 남겨 둡니다.
TIME_OUT = "HH : MM"으로 시간을 표시하고 상태가 "O"인 경우 시간을 표시하고 그렇지 않으면 공백으로 남겨 둡니다.
USERNAME =은 (는) 하드 코드 된 "사용자 이름"입니다.
output.csv 파일은 위의 예제 데이터에서와 같이 읽어야합니다.
output.csv (데이터 포맷)
101,Person1,3,01/13/16,10:38,,Username
103,Person1,5,01/20/16,,12:53,Username
102,Person2,7,01/21/16,,14:45,Username
101,Person3,5,01/17/16,12:17,,Username
102,Person3,3,01/25/16,10:15,,Username
주 첫 번째 열에 해당하는 번호.
TIME_IN 및 TIME_OUT 열의 경우 공란과 PERIOD에 유의하십시오.
마지막으로 가져 왔습니다.CSV 파일에서
from datetime import datetime as dt
import csv
class TimePeriod:
def __init__(self, starttime, endtime, periodname):
self.starttime = starttime
self.endtime = endtime
self.periodname = periodname
def get_time_list(time_file):
timelist = list()
with open(time_file) as inputs:
for line in inputs:
starttime, endtime, periodname = line.strip().split(",")
timelist.append(TimePeriod(starttime, endtime, periodname))
return timelist
def get_site_code_dict(site_code_file):
mydict = dict()
with open(site_code_file) as inputs:
for line in inputs:
site,code = line.strip().split(",")
mydict[site] = code
return mydict
def process_raw(raw_file, site_code_dict):
with open(raw_file) as inputs, open('ouput.csv', 'w') as outlist:
for line in inputs:
person, date_time, site, status = line.strip().split(",")
time_object = dt.strptime(date_time, '%m/%d/%y %H:%M')
date = time_object.strftime('%m/%d/%y')
time = time_object.strftime('%H:%M')
filteredlist = filter(lambda x: time >= x.starttime and time <= x.endtime, time_list)
outlist.write(site_code_dict[site]+',')
outlist.write(person+',')
outlist.write(date+',')
outlist.write(filteredlist[0].periodname+',')
if status == "I" or status == "L":
outlist.write(time+',')
else:
outlist.write(""+',')
if status == "O":
outlist.write(time+',')
else:
outlist.write(""+',')
outlist.write("Username"+'\n')
outlist.close()
if __name__ == "__main__":
site_code_dict = get_site_code_dict("file2.csv")
time_list = get_time_list("file3.csv")
process_raw("file1.csv", site_code_dict)
출력 데이터 : 위의 코드와
101,Person1,01/13/16,3,10:38,,Username
103,Person1,01/20/16,5,,12:53,Username
102,Person2,01/21/16,7,,14:45,Username
101,Person3,01/17/16,5,12:17,,Username
102,Person3,01/25/16,3,10:15,,Username
, 나는 순서대로 열을 가지고있다.
첫 번째 열에 올바른 코드가 있습니다.
날짜 열에는 'mm/dd/yy'형식의 날짜 만 있습니다.
레코드가 "I"또는 "L"인 경우 TIME_IN 열에는 군사 시간 만 있습니다.
TIME_OUT 열이 "O"인 경우 군대 시간이 있습니다.
"클래스"TimePeriod를 사용하여 기간을 마쳤습니다.
도움을 주셔서 감사합니다. 초심자입니다.
첫 번째로드 파일 2는 코드에 대한 사이트 매핑을 만듭니다. 그런 다음 파일 1을 구문 분석 할 때 다른 모든 데이터를 포함하여 들어있는 사람 목록을 유지하고 아웃 라인이 표시되면 파일에 쓰고 목록에서 제거하십시오. 하루가 끝날 때 일치 항목이없는 항목이있을 경우 청소를해야 할 수도 있습니다. –