代码是:
from datetime import datetime,time
from csv import reader
with open('onlyOnce.txt', 'r+') as fonlyOnce:
for f_time, sec_time, dte in filter(None, reader(fonlyOnce, delimiter="_")):
check_stime=f_time.split(":")
Stask_hour=check_stime[0]
Stask_minutes=check_stime[1]
check_stime = datetime.strptime(f_time,"%H:%m").time()
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 (date_now.strftime("%Y-%m-%d") == dte and time(int(Stask_hour),int(Stask_minutes)) <= now_time <= time(int(Etask_hour),int(Etask_minutes))):
print("this line in range time: "+ f_time)
#delete this line
fonlyOnce.write(" ")
else:
print("Padraic Cunningham")
fonlyOnce.close()
1-循环文件中的行
2-检查是否有任何线路在当前时间范围内
3-如果是:打印this line in range time: 9:1
并从同一个文件中删除这一行。在
4-文件中的数据是:
^{pr2}$5-输出必须:
7:1_8:35_2016-04-14
8:1_9:35_2016-04-14
因为最后一条线的时间在电流范围内时间。它必须删除并替换空行。在
我的问题是,这段代码将清除所有文件,我不希望:
入侵代码:fonlyOnce.write(" ")
谢谢
我所做的:
1确定循环外删除。
2如果不符合您的需要,请将数据替换为空列表
三。打开新文件以写入已处理的数据
暴力解决方案-适用于小文件
0-创建行缓冲区
1-循环文件中的行
1.1-检查是否有线路在当前时间范围内
1.2-如果是:打印此行,范围为时间:9:1 如果否:将行添加到缓冲区
2-关闭文件进行读取
3-在缓冲区中添加空行
4-重新打开文件进行写入
5-将缓冲区刷新到文件中,并保存文件
您不想编辑正在读取的文件。这是个坏主意!
相反,您可能需要考虑读取文件的每一行 从列表中删除不需要的项目,然后重写 包含此列表的文件。在
如果你的文件很大,这可能会很慢。在
另外,在代码的末尾,您可以调用
fonlyOnce.close()
,但您不需要这样做。一旦您离开文件,上下文管理器(with
语句)会自动关闭该文件。相关问题 更多 >
编程相关推荐