簡體   English   中英

Python:從.txt文件中刪除具有固定開始和結束的子字符串

[英]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.

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