如何使用python从文件中删除特定行?

2024-09-28 17:02:02 发布

您现在位置:Python中文网/ 问答频道 /正文

代码是:

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(" ")

谢谢


Tags: 文件代码indatetimetimechecknowint
3条回答

我所做的:
1确定循环外删除。
2如果不符合您的需要,请将数据替换为空列表
三。打开新文件以写入已处理的数据

    def IsFit( f_time, sec_time, dte ):
        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))):
            return False
        else:
            return True

    with open('onlyOnce.txt', 'r+') as fonlyOnce:
        res = [  line if IsFit(*line ) else [] for line in csv.reader(fonlyOnce, delimiter="_") if line ]

    with open(NewFile,'wb') as f:
        wirter = csv.wither(f)
        wirter.writerows(res)

暴力解决方案-适用于小文件

0-创建行缓冲区

1-循环文件中的行

1.1-检查是否有线路在当前时间范围内

1.2-如果是:打印此行,范围为时间:9:1 如果否:将行添加到缓冲区

2-关闭文件进行读取

3-在缓冲区中添加空行

4-重新打开文件进行写入

5-将缓冲区刷新到文件中,并保存文件

  • 您不想编辑正在读取的文件。这是个坏主意!

  • 相反,您可能需要考虑读取文件的每一行 从列表中删除不需要的项目,然后重写 包含此列表的文件。在

    如果你的文件很大,这可能会很慢。在

    另外,在代码的末尾,您可以调用fonlyOnce.close(),但您不需要这样做。一旦您离开文件,上下文管理器(with语句)会自动关闭该文件。

相关问题 更多 >