Необходимо удалить блок if в файле с помощью python

#python

#python

Вопрос:

Нужна помощь, у меня есть файл, который содержит текст с несколькими условиями if, мне нужно удалить конкретное условие if с помощью кода Python file1.js

 if (aaaaa == b) {
qqqq
cccc
vvv
}
  

Проблема в том, что я не могу читать построчно, потому что «}» останется, и его будет трудно удалить, так как в файле будет «}».
может кто-нибудь, пожалуйста, указать
Мой фрагмент кода

 import re
file_path = "C:/Users/abcd.js" 
with open(file_path, "r") as f: 
        
    data = f.readlines() 
      
 
with open(file_path, "w") as f:   
    for line in data :  
        if line == "{if (aaaaa == b) {" :
            data = re.sub(r'if (aaaaa == b) {.*?}', '', data,flags=re.DOTALL)
            print(data)

            f.write(line)
  

Ответ №1:

Проблема, с которой вы столкнулись здесь, заключается в том, что .readlines() считывает строку, разделенную символом перевода строки ( n ), и обрабатывает их как отдельные записи в массиве, поэтому ваш data содержит:

 data == ['if (aaaaa == b) {n', 'qqqqn', 'ccccn', 'vvvn', '}'] 
  

Если что-то не работает, запустите это через отладчик или выведите на консоль то, что на самом деле содержит переменная.

Попробуйте преобразовать этот массив в одну строку, затем заменить символы новой строки и передать это ваше регулярное выражение.

 with open(file_path) as f:       
    data = f.readlines() 
      
print(data)
mod_data = "".join(data).replace("n", "")
print(mod_data)
  

В качестве альтернативы используйте f.read() , чтобы просто прочитать файл в виде одной строки.

Отредактировано:

Вы можете попробовать это таким образом и переработать свое регулярное выражение.

 import re

file_path = "test2.py" 

with open(file_path, "r") as f: 
    data = f.readlines() 

data = "".join(data).replace("n", "")
data = re.sub(r'ifs(aaaaa == b)s{.*?}', 'this is a replacement', data, flags=re.DOTALL)
print(data)

with open(file_path, 'w') as f:   
    f.write(data)
  

Комментарии:

1. @ZAriel — Это действительно работает — проблема в том, что ваш шаблон регулярных выражений неверен. ( , ) , { , } и пробелы являются специальными символами и должны быть экранированы. Вы только спросили, как справиться с последним } , поэтому я предложил превратить его в строку и таким образом передать в регулярное выражение. Смотрите мой отредактированный ответ.

2. @ZAriel это решение должно охватывать ваш тестовый пример, надеюсь, вы сможете применить его к тому, что вы хотите.

Ответ №2:

В этом примере удаляется ненужное условие с завершением }

 file_path = "a.js" 
with open(file_path, "r") as f: 
    data = f.readlines() 

with open(file_path, "w") as f:   
    removing = False
    for line in data :  
    
    if '}' in line and removing:
        removing = False
        continue
    
    if 'if (aaaaa == b) {' in line:
        removing = True
                
    if not removing: f.write(line)

  

Комментарии:

1. это удаляет только условие if и первую строку, еще несколько строк и } не удаляются