![](/img/trans.png)
[英]How to delete from specific line until specific line in a file on 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.