파일에서 내용을 분할하려고합니다.이 파일에는 많은 줄이 있으며 파일에 이러한 데이터가있는 예를 들어 얼마나 많은 줄이 있는지 알 수 없습니다.
7:1_8:35_2016-04-14
8:1_9:35_2016-04-15
9:1_10:35_2016-04-16
paython을 사용하여 각 줄에서 반복하고 각 줄을 다음과 같이 나누고 싶습니다.
for line in iter(file):
task =line.split("_")
first_time=task[0] #8:1
second_time=task[1] #9:35
date=task[2] #2016-04-15
그러나 이것은 나에게 줄 것입니다 : task [0]은 첫 번째 줄입니다. task [1]은 두 번째 줄입니다. .... 어떻게 한 번에 한 줄만 읽고 그 내용을 분할하여 무언가를하고 같은 일을 할 수 있습니다. 다른 라인.
내 질문 업데이트 : 전체 코드 :
with open('onlyOnce.txt', 'r') as fp:
for f_time, sec_time, dte in filter(None, reader(fp, delimiter="_")):
check_stime=f_time.split(":")
Stask_hour=check_stime[0]
Stask_minutes=check_stime[1]
check_etime=sec_time.split(":")
Etask_hour=check_etime[0]
Etask_minutes=check_etime[1]
#check every minute if current information = desired information
now = datetime.now()
now_time = now.time()
date_now = now.date()
if (time(Stask_hour,Stask_minutes) <= now_time <= time(Etask_hour,Etask_minutes) and date_now == dte):
print("this line in range time: "+ f_time)
else:
print("")
fp.close()
이 코드의 목표는 각 줄의 현재 시간을 확인하는 것입니다. 현재 줄이 "첫 번째 줄"의 범위에있을 때 // 무언가를 할 때 make schedule 또는 alarm과 같습니다.
오류 :
Traceback (most recent call last):
File "<encoding error>", line 148, in <module>
TypeError: 'module' object is not callable
마지막 업데이트는 다음과 같습니다.
from datetime import datetime,time
from csv import reader
with open('onlyOnce.txt', 'r') as fp:
for f_time, sec_time, dte in filter(None, reader(fp, delimiter="_")):
check_stime=f_time.split(":")
Stask_hour=check_stime[0]
Stask_minutes=check_stime[1]
check_etime=sec_time.split(":")
Etask_hour=check_etime[0]
Etask_minutes=check_etime[1]
#check every minute if current information = desired information
now = datetime.now()
now_time = now.time()
date_now = now.date()
if time(int(Stask_hour),int(Stask_minutes)) <= now_time <= time(int(Etask_hour),int(Etask_minutes) and dte == date_now):
print("this line in range time: "+ f_time)
else:
print("")
fp.close()
그러나 나는 바보 같은 질문을하고 싶다 : / 내가이 논리를 체크 할 때, "예"를 인쇄하지 않을 것이다! 그러나 날짜는 2016-04-14와 같으므로 왜 정확하지 않습니까? Oo 혼란스러워
if('2016-04-14' == datetime.now().date() ):
print("yes")
도움을 주신 모든 분들께 감사드립니다 : Padraic Cunningham 및 기타
파일 객체를 전달 하는 csv 판독기 를 사용 하고 구분자로 사용 합니다._
from csv import reader
with open("infile') as f:
# loop over reader getting a row at a time
for f_time, sec_time, dte in reader(f, delimiter="_"):
print(f_time, sec_time, dte )
다음과 같은 출력을 제공합니다.
In [2]: from csv import reader
In [3]: from StringIO import StringIO
In [4]: for f,s,d in reader(StringIO(s), delimiter="_"):
...: print(f,s,d)
...:
('7:1', '8:35', '2016-04-14')
('8:1', '9:35', '2016-04-15')
('9:1', '10:35', '2016-04-16')
빈 줄이 있으므로 필터링해야합니다.
with open("infile') as f:
for f_time, sec_time, dte in filter(None, reader(f, delimiter="_")):
print(f_time, sec_time, dte )
이제 빈 행이 제거됩니다.
In [5]: s = """7:1_8:35_2016-04-14
...: 8:1_9:35_2016-04-15
...:
...: 9:1_10:35_2016-04-16"""
In [6]: from csv import reader
In [7]: from StringIO import StringIO
In [8]: for f,s,d in filter(None, reader(StringIO(s), delimiter="_")):
...: print(f,s,d)
...:
('7:1', '8:35', '2016-04-14')
('8:1', '9:35', '2016-04-15')
('9:1', '10:35', '2016-04-16')
현재 날짜와 시간 및 분을 현재 시간과 비교하려면 다음을 수행하십시오.
from datetime import datetime
from csv import reader
with open('onlyOnce.txt', 'r') as fp:
for f_time, sec_time, dte in filter(None, reader(fp, delimiter="_")):
check_stime = f_time.split(":")
stask_hour= int(check_stime[0])
stask_minutes = int(check_stime[1])
check_etime = sec_time.split(":")
etask_hour = int(check_etime[0])
etask_minutes = int(check_etime[1])
# check every minute if current information = desired information
now = datetime.now()
hour_min_sec = now.hour, now.minute, now.second
if now.strftime("%Y-%d-%m") == dte and (stask_hour, stask_minutes, 0) <= hour_min_sec <= (etask_hour, etask_minutes, 0):
print("this line in range time: " + f_time)
else:
print("")
또는 더 간단한 방법은 시간을 구문 분석하는 것입니다.
from datetime import datetime
from csv import reader
with open('onlyOnce.txt', 'r') as fp:
for f_time, sec_time, dte in filter(None, reader(fp, delimiter="_")):
check_stime = datetime.strptime(f_time,"%H:%m").time()
check_etime = datetime.strptime(f_time,"%H:%m").time()
# check every minute if current information = desired information
now = datetime.now()
if now.strftime("%Y-%d-%m") == dte and check_etime <= now.time() <= check_etime:
print("this line in range time: " + f_time)
else:
print("")
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다