2014-06-19 7 views
2

저는 파이썬을 처음 사용하고 있으며, 텍스트 파일에 쓰여진 시간과 현재의 시간 차이를 계산하는 간단한 스크립트를 작성하고 있습니다. 텍스트 파일에서 시간의 형식은 다음과 같습니다이 스크립트텍스트 파일의 시간과 시간의 시차를 계산하십시오.

f = open('N:\\newfile.txt') 
timestamp = f.readline() 
f.close() 
now = str(datetime.now()) 
#Removing the seconds from the now time 
now = now[0:16] 
FMT = '%Y-%m-%d %H:%M' 
tdelta = datetime.strptime(now, FMT) - datetime.strptime(timestamp, FMT) 
print tdelta 

입니다 2013년 10월 5일 0시 20분

하지만 그것을 실행할 때 다음과 같은 오류를 얻을

Traceback (most recent call last): 
File "N:\Test.py", line 12, in <module> 
tdelta = datetime.strptime(now, FMT) - datetime.strptime(timestamp, FMT) 
File "C:\Program Files (x86)\Python26\lib\_strptime.py", line 328, in _strptime 
data_string[found.end():]) 
ValueError: unconverted data remains: 

누구든지 내가 뭘 잘못하고 있다고 제안 할 수 있습니까?

답변

3

파일 개체의 readline() 메서드는 줄 바꿈 문자을 포함하여 줄을 반환합니다. 파이썬의 문서는 the details :

f.readline()은 파일에서 한 줄을 읽습니다. 줄 바꿈 문자 (\n)는 문자열의 끝에 남으며 파일이 개행에서 끝나지 않는 경우 파일의 마지막 줄에서만 생략됩니다. 이렇게하면 반환 값이 모호하지 않게됩니다. f.readline()이 빈 문자열을 반환하면 파일의 끝에 도달하고 빈 줄은 '\n'으로 표시됩니다. 단 하나의 줄 바꿈 만 포함 된 문자열입니다.

그래서, 당신의 timestamp은 다음과 같이 보입니다 :

'2014-06-18 23:33\n' 

을 ... 그리고 strptime()는 마지막 줄 바꿈에 질식되어있다. 이 라인을 변경하여 문제를 해결할 수 있습니다

timestamp = f.readline() 

(문자열에서 공백을 제거하기 위해 str.strip() 방법을 사용하여)

timestamp = f.readline().strip() 

에. 당신은 내가 dateutil.parse 모듈을 사용하는 것이 좋습니다 파이썬으로 처음 사용하는 경우

+0

Zero Piraeus. 이것은 완벽하게 작동했습니다. – user3754712

0

, 그것은 당신이 현재
전 사용 모르는 경우에도 일반적인 날짜 형식을 구문 분석 할 수 있습니다 :

>>> import dateutil.parser 
>>> from datetime import datetime 
>>> 
>>> utc_time = '2014-06-19T00:00:00' 
>>> dateutil.parser.parse(utc_time) 
datetime.datetime(2014, 6, 19, 0, 0) 
>>> local_time = '2014-06-19 00:00:00+0002' 
>>> dateutil.parser.parse(local_time) 
datetime.datetime(2014, 6, 19, 0, 0, tzinfo=tzoffset(None, 120)) 
>>> #even with new line char 
>>> time_with_new_line = '2014-06-19 00:00\n' 
>>> dateutil.parser.parse(time_with_new_line) 
datetime.datetime(2014, 6, 19, 0, 0) 

번 문자열 날짜를 datetime 객체로 구문 분석하면 substract는 사소합니다.

>>> import dateutil.parser 
>>> from datetime import datetime 
>>> with open('newfile.txt','r') as f: 
...  datetime.now() - dateutil.parser.parse(f.readline()) 
... 
datetime.timedelta(0, 28100, 210498) 
+0

답장을 보내 주셔서 감사합니다 xecgr – user3754712

+0

당신은 환영합니다, dateutil.parser는 매력처럼 작동합니다! – xecgr