![](/img/trans.png)
[英]how to remove lines with duplicated substrings from txt file in python?
[英]Python: Remove substrings with fixed start and end from .txt file
我有一些文件p2.txt
以下內容:
% proof/6: [all]
T [14] Call: proof(([p∨q∨r], [])⊢(q∨p∨r), _16004, _16006, proof{
1: ["p∨q∨r","step(1)"]
}, _16010, _16012)
T [24] Call: proof(([temp(p∨q∨r)], [])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)), _16004, _16006, proof{
0: ["assumptions([p∨q∨r])","premisses_origin([p∨q∨r,(p→q∨p∨r)∧(q∨r→q∨p∨r)])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([q∨p∨r])","rule([∨E])","d0(([p∨q∨r],[])⊢(q∨p∨r))","d1(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","step(2)"]
1: ["p∨q∨r","step(1)"]
}, _16010, 1)
T [34] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r)∧([temp(p∨q∨r)], [p→q∨p∨r])⊢(q∨r→q∨p∨r), _16004, _16006, proof{
-1: ["assumptions([p∨q∨r])","premisses_origin([p→q∨p∨r,q∨r→q∨p∨r])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([(p→q∨p∨r)∧(q∨r→q∨p∨r)])","rule([∧I])","d0(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","d1(([temp(p∨q∨r)],[])⊢(p→q∨p∨r)∧([temp(p∨q∨r)],[p→q∨p∨r])⊢(q∨r→q∨p∨r))","step(3)"]
0: ["assumptions([p∨q∨r])","premisses_origin([p∨q∨r,(p→q∨p∨r)∧(q∨r→q∨p∨r)])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([q∨p∨r])","rule([∨E])","d0(([p∨q∨r],[])⊢(q∨p∨r))","d1(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","step(2)"]
1: ["p∨q∨r","step(1)"]
}, _16010, 0)
T [43] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r), _31686, _31688, proof{
-1: ["assumptions([p∨q∨r])","premisses_origin([p→q∨p∨r,q∨r→q∨p∨r])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([(p→q∨p∨r)∧(q∨r→q∨p∨r)])","rule([∧I])","d0(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","d1(([temp(p∨q∨r)],[])⊢(p→q∨p∨r)∧([temp(p∨q∨r)],[p→q∨p∨r])⊢(q∨r→q∨p∨r))","step(3)"]
0: ["assumptions([p∨q∨r])","premisses_origin([p∨q∨r,(p→q∨p∨r)∧(q∨r→q∨p∨r)])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([q∨p∨r])","rule([∨E])","d0(([p∨q∨r],[])⊢(q∨p∨r))","d1(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","step(2)"]
1: ["p∨q∨r","step(1)"]
}, _31664, _31694)
T [53] Call: proof(([temp(p∨q∨r), p], [])⊢(q∨p∨r), _31686, _31688, proof{
-2: ["assumptions([p,p∨q∨r])","premisses_origin([q∨p∨r])","premisses_no_origin([])","premisses_exc_origin([p])","conclusion([p→q∨p∨r])","rule([→I])","d0(([temp(p∨q∨r)],[])⊢(p→q∨p∨r))","d1(([temp(p∨q∨r),p],[])⊢(q∨p∨r))","step(5)"]
-1: ["assumptions([p∨q∨r])","premisses_origin([p→q∨p∨r,q∨r→q∨p∨r])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([(p→q∨p∨r)∧(q∨r→q∨p∨r)])","rule([∧I])","d0(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","d1(([temp(p∨q∨r)],[])⊢(p→q∨p∨r)∧([temp(p∨q∨r)],[p→q∨p∨r])⊢(q∨r→q∨p∨r))","step(3)"]
0: ["assumptions([p∨q∨r])","premisses_origin([p∨q∨r,(p→q∨p∨r)∧(q∨r→q∨p∨r)])","premisses_no_origin([])","premisses_exc_origin([])","conclusion([q∨p∨r])","rule([∨E])","d0(([p∨q∨r],[])⊢(q∨p∨r))","d1(([temp(p∨q∨r)],[])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)))","step(2)"]
1: ["p∨q∨r","step(1)"]
2: ["p","step(4)"]
}, _31664, _32382) ...
我的目標是將其轉換為一些文件p2_red.txt
,如下所示:
% proof/6: [all]
T [14] Call: proof(([p∨q∨r], [])⊢(q∨p∨r), _16004, _16006, _16010, _16012)
T [24] Call: proof(([temp(p∨q∨r)], [])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)), _16004, _16006, _16010, 1)
T [34] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r)∧([temp(p∨q∨r)], [p→q∨p∨r])⊢(q∨r→q∨p∨r), _16004, _16006, _16010, 0)
T [43] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r), _31686, _31688, , _31664, _31694)
T [53] Call: proof(([temp(p∨q∨r), p], [])⊢(q∨p∨r), _31686, _31688, , _31664, _32382)
為了解決這個問題,我編寫了以下代碼:
import re
with open("p2.txt") as f:
content = f.read()
result = re.sub(", proof{.*?}",'', content)
print(result)
with open("p2_red.txt", "w") as f:
f.write(result)
但由於某種原因,這不起作用。 我該如何修復該代碼?
找到了一些解決方案(它有點復雜,但可能他們不是更直接的方法):
def remove_substrings_from_file(file_read, file_write, start, end):
'''
Remove substrings with fixed 'start' and 'end' from .txt file 'file_read' and saves it into 'file_write'.
more details see:
https://stackoverflow.com/questions/72931747/python-remove-substrings-with-fixed-start-and-end-from-txt-file
'''
with open(file_read) as f_read:
with open(file_write, "w") as f_write:
append_to_file = True
for s in f_read:
if s.find(start) != -1:
if append_to_file == False:
raise Exception("Term 'proof' in 'proof' at line " + s)
append_to_file = False
i = s.index(start)
f_write.write(s[0:i - 1])
elif s.find(end) != -1:
if append_to_file == True:
raise Exception("Term '}' outside of 'proof' at line " + s)
append_to_file = True
i = s.index(end)
f_write.write(s[i : -1] + "\n")
else:
if append_to_file == True:
f_write.write(s)
start = ", proof{"
end = "}"
file_read = "p2.txt"
file_write = "p2_red.txt"
remove_substrings_from_file(file_read, file_write, start, end)
輸出:
% proof/6: [all]
T [14] Call: proof(([p∨q∨r], [])⊢(q∨p∨r), _16004, _1600}, _16010, _16012)
T [24] Call: proof(([temp(p∨q∨r)], [])⊢((p→q∨p∨r)∧(q∨r→q∨p∨r)), _16004, _1600}, _16010, 1)
T [34] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r)∧([temp(p∨q∨r)], [p→q∨p∨r])⊢(q∨r→q∨p∨r), _16004, _1600}, _16010, 0)
T [43] Call: proof(([temp(p∨q∨r)], [])⊢(p→q∨p∨r), _31686, _3168}, _31664, _31694)
T [53] Call: proof(([temp(p∨q∨r), p], [])⊢(q∨p∨r), _31686, _3168}, _31664, _32382
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.