如何匹配文件中的多行部分并使用 Python 中的正则表达式将其删除?
how to match a multiline section in a file and delete it using regex in Python?
我有一个 INI 文件,其中包含 [ ] 中提到的部分和键 = 值方式的变量。
在其中,我有一个名为 [FILES] 的部分,该部分仅在其下提到了一些文件(扩展名为 .ini)路径,没有任何键值对。
使用 Python 的 configpaser 模块,由于 [FILES] 部分,我无法解析它。
因此,我试图通过将其替换为空白来从文件中删除该部分。
ini 文件如下所示,[FILES]
下可能有也可能没有定义的部分
[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[FILES]
$PWD/../log/inc1-ww.ini
inc2.ini
/home/user/inputs/inc_new.ini
[PQR]
x= xyz
y = 2
我正在尝试下面的代码,但是 [FILES] 之后定义的部分也出现了,任何帮助更正正则表达式并将其从文件中删除的帮助都会很有帮助:
import re
txt = open('my.ini', "r")
data = txt.read()
txt.close()
regex = re.compile(r'^(\[FILES\])[\n\r]([$-_a-zA-Z0-9\/\.\n\r]+)', re.MULTILINE)
matches = []
for m in regex.finditer(data):
matches.append(m.groups())
提前致谢!
这真的不值得用正则表达式来做;如果即使使用 allow_no_value
也不能使用 ConfigParser,请阅读文件并忽略 FILES
部分中的所有行:
import io
data = io.StringIO("""
[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[FILES]
$PWD/../log/inc1-ww.ini
inc2.ini
/home/user/inputs/inc_new.ini
[PQR]
x= xyz
y = 2
""".strip()
)
current_section = None
for line in data:
line = line.rstrip()
if line.startswith("["):
current_section = line.strip("[]")
if current_section != "FILES":
print(line)
这输出
[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[PQR]
x= xyz
y = 2
(您可以写入文件或附加到列表,而不是 print()
插入该行。)
我有一个 INI 文件,其中包含 [ ] 中提到的部分和键 = 值方式的变量。 在其中,我有一个名为 [FILES] 的部分,该部分仅在其下提到了一些文件(扩展名为 .ini)路径,没有任何键值对。
使用 Python 的 configpaser 模块,由于 [FILES] 部分,我无法解析它。 因此,我试图通过将其替换为空白来从文件中删除该部分。
ini 文件如下所示,[FILES]
下可能有也可能没有定义的部分[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[FILES]
$PWD/../log/inc1-ww.ini
inc2.ini
/home/user/inputs/inc_new.ini
[PQR]
x= xyz
y = 2
我正在尝试下面的代码,但是 [FILES] 之后定义的部分也出现了,任何帮助更正正则表达式并将其从文件中删除的帮助都会很有帮助:
import re
txt = open('my.ini', "r")
data = txt.read()
txt.close()
regex = re.compile(r'^(\[FILES\])[\n\r]([$-_a-zA-Z0-9\/\.\n\r]+)', re.MULTILINE)
matches = []
for m in regex.finditer(data):
matches.append(m.groups())
提前致谢!
这真的不值得用正则表达式来做;如果即使使用 allow_no_value
也不能使用 ConfigParser,请阅读文件并忽略 FILES
部分中的所有行:
import io
data = io.StringIO("""
[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[FILES]
$PWD/../log/inc1-ww.ini
inc2.ini
/home/user/inputs/inc_new.ini
[PQR]
x= xyz
y = 2
""".strip()
)
current_section = None
for line in data:
line = line.rstrip()
if line.startswith("["):
current_section = line.strip("[]")
if current_section != "FILES":
print(line)
这输出
[ABC]
p1 = 2
p2 = 3
[DEF]
q1= 4
q2 = queue
[PQR]
x= xyz
y = 2
(您可以写入文件或附加到列表,而不是 print()
插入该行。)