python-3.x 无法从XML文件返回所需的字符串

ozxc1zmp  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(148)

我已经创建了这个代码有一个用户点在一个目录,并为它去通过目录寻找.xml文件。一旦找到该程序应该搜索每个文件寻找字符串是32位的长度。这是唯一的要求,内容是不重要的,在这个时候,只是它返回32位字符串。
我已经尝试使用Python中的regex模块,如下所示,当运行程序时,迭代可用文件。返回所有文件名,但String_recovery函数只返回空列表。我已经确认xml包含32位字符串。

import os
import re
import tkinter as tk
from tkinter import filedialog


def string_recovery(data):
    short_string = re.compile(r"^[a-zA-Z0-9\-._]{32}$")
    strings = re.findall(short_string, data)
    print(strings)

def xml_search(directory):
    xml_files = []
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(".xml"):
                xml_files.append(os.path.join(root, file))
    print("The following XML files have been found.")
    print(xml_files)

    for xml_file in xml_files:
        with open(xml_file, "r") as f:
            string_recovery(f.read())

def key_finder():
    directory = filedialog.askdirectory()
    xml_search(directory)

key_finder()
vmpqdwk3

vmpqdwk31#

默认情况下,python模式不是"多行"的,因此^$匹配文本块的开始和结束,而不是每一行。
比较:

import re

text = """
foo
12345678901234567890123456789011
12345678901234567890123456789011
"""
pattern = r"^[a-zA-Z0-9\-._]{32}$"
print(re.findall(pattern, text, re.M))  ## <--- flag

给予:

[
    '12345678901234567890123456789011',
    '12345678901234567890123456789011'
]

与:

import re

text = """
foo
12345678901234567890123456789011
12345678901234567890123456789011
"""
pattern = r"^[a-zA-Z0-9\-._]{32}$"
print(re.findall(pattern, text))

给予:

[]
41zrol4v

41zrol4v2#

也许你应该仔细检查每一行:

for xml_file in xml_files:
        with open(xml_file, "r") as f:
            string_recovery(f.read())

如果你的string_recovery工作正常(尝试用一行,我不能重现你的例子,但创建一个变量line =,并把那里的一行应该恢复。
并检查每一行而不是整个文件:

for xml_file in xml_files:
        with open(xml_file, "r") as f:
            for line in f.readliens():
                string_recovery(line)

相关问题