2017-05-18 3 views
0

파이썬을 사용하여 CSV 파일의 두 번째 위치에있는 날짜 형식을 30-Jan-02에서 30.Jan.2002으로 변경하려고합니다. 몇 가지 시도했지만 문자열 및 바이트 comptability 혼란 스러워요. 포장을 풀고 반복 가능한파이썬에서 csv에서 날짜 형식을 변경하는 방법은 무엇입니까?

import os 
import csv 


from datetime import datetime 
import sys 
from tempfile import NamedTemporaryFile 

with open("Filenamecsv",'r') as csvfile, NamedTemporaryFile(dir="path/parh",delete=False) as temp: 
    w = csv.writer(temp) 
    r = csv.reader(csvfile) 
    for row in r: 
     dt = row[2].split("-") 
     row[2] = "{}.{}.{}".format(row[-1],row[1],row[0]) 
     w.writerow(row) 
move(temp.name,"Filename.csv") 
+0

코드와 정확한 문제가 무엇입니까? 오류 메시지가 나타 납니까? – MrLeeh

+0

당신이 직면 한 문제는 무엇입니까? – MONTYHS

+1

날짜가 두 번째 위치에 있으면''row [1]''에 있어야합니다. 그리고 그것이''30-Jan-02''의 형태라면''/''와 분리하는 이유는 무엇입니까? 그리고 새로운 날짜를 만들 때''{}. {}. {} ". format (...)''에서''row'' 대신''dt''를 사용하기를 원합니다. –

답변

1

day, month, year = row[2].split('-') 

조건식, 날짜를 가정하는 것은

year = ('19' if int(year)>17 else '20')+year 

row

row[2] = '.'.join((day, month, year)) 
1

당신에게로 교체 ... 미래되지 않습니다 또한 할 수있다. 사용 datetime

In [25]: import datetime 

In [26]: dt = datetime.datetime.strptime("30-Jan-02", '%d-%b-%y').strftime('%d.%b.%Y') 

In [27]: dt 
Out[27]: '30.Jan.2002' 
0

호프 이것은 위에서 언급 한 답변의 확장이며 자체 설명입니다.

import datetime 

with open("filename.csv", 'r') as csvfile, open('temp.csv', 'w') as temp_file: 

    for line in csvfile.readlines(): 
     # Fetch all dates in the csv 
     dates = line.split(',') 

     # Extract date, month and year 
     dt, mon, yr = dates[1].split('-') 

     # Convert the second date and replace 
     dates[1] = datetime.datetime.strptime(dates[1], '%d-%b-%y').strftime('%d.%b.%Y') 

     # Write date to temp file 
     temp_file.write(','.join(dates)) 

print("Process complete!") 

입력 : filename.csv

30-Jan-02,31-Jan-02,01-Feb-02 
30-Jan-02,31-Jan-02,01-Feb-02 

출력 : temp.csv

30-Jan-02,31.Jan.2002,01-Feb-02 
30-Jan-02,31.Jan.2002,01-Feb-02 
관련 문제