簡體   English   中英

如何使用python從文件中刪除特定行?

[英]How to delete specific line from file using 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打印this line in range time: 9:1然后從同一文件中刪除該行。

文件中的4數據為:

7:1_8:35_2016-04-14
8:1_9:35_2016-04-14
9:1_10:35_2016-04-14

5-輸出必須是:

7:1_8:35_2016-04-14
8:1_9:35_2016-04-14

由於最后一行的時間在當前時間范圍內,因此必須刪除並替換空行。

我的問題是此代碼將清除所有文件,而我不希望這樣:

無效的代碼: fonlyOnce.write(" ")

謝謝

我做了什么:
1.取消確定功能的循環。
2.如果不符合您的需求,請用空列表替換數據
3.打開一個新文件以寫入已處理的數據

    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語句)會自動關閉文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM