我已经创建了这个代码有一个用户点在一个目录,并为它去通过目录寻找.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()
2条答案
按热度按时间vmpqdwk31#
默认情况下,python模式不是"多行"的,因此
^
和$
匹配文本块的开始和结束,而不是每一行。比较:
给予:
与:
给予:
41zrol4v2#
也许你应该仔细检查每一行:
如果你的
string_recovery
工作正常(尝试用一行,我不能重现你的例子,但创建一个变量line =
,并把那里的一行应该恢复。并检查每一行而不是整个文件: