所以问题主要有两个方面。(1) 从每个文件中找出最大值对,并(2)将其写入Excel工作簿。我一直提倡编写可重用代码。在这里,您必须将所有xml文件放在一个文件夹中,然后简单地执行main方法并获得结果。在
现在有几个选项可以写入excel。最简单的方法是创建一个制表符或逗号分隔的文件(CSV)并手动将其导入excel。XMWT是一个标准库。OpenPyxl是另一个库,它使得创建excel文件在代码行方面更简单、更小。在
请确保在文件开头导入所需的库和模块。在import re
import os
import openpyxl
在读取XML文件时,我们使用正则表达式来提取所需的值。在
^{pr2}$
为了更模块化一点,创建一个方法来解析给定XML文件中的每一行,查找regex模式,提取所有值并返回最大值。在下面的方法中,我返回一个包含两个元素的元组(Value,另一个),这两个元素是该文件中每种类型的最大数目。在def get_values(filepath):
values = []
another = []
for line in open(filepath).readlines():
matchValue = re.search(regexPatternValue, line)
matchAnother = re.search(regexPatternAnotherValue, line)
if matchValue:
values.append(int(matchValue.group(1)))
if matchAnother:
another.append(int(matchAnother.group(1)))
# Now we want to calculate highest number in both the lists.
try:
maxVal = max(values)
except:
maxVal = '' # This case will handle if there are NO values at all
try:
maxAnother = max(another)
except:
maxAnother = ''
return maxVal, maxAnother
现在将XML文件保存在一个文件夹中,对其进行迭代,并在每个文件夹中提取regex模式。在下面的代码中,我将这些提取的值附加到一个名为“可写行”的列表中。最后,在解析所有文件之后,创建一个工作簿并以格式添加提取的值。在def process_folder(folder, output_xls_path):
files = [folder+'/'+f for f in os.listdir(folder) if ".txt" in f]
writable_lines = []
writable_lines.append(("Value","Another Value")) # Header in the excel
for file in files:
values = get_values(file)
writable_lines.append((str(values[0]),str(values[1])))
wb = openpyxl.Workbook()
sheet = wb.active
for i in range(len(writable_lines)):
sheet['A' + str(i+1)].value = writable_lines[i][0]
sheet['B' + str(i+1)].value = writable_lines[i][1]
wb.save(output_xls_path)
在下面的for循环中,我们指导openpyxl在指定的单元格中写入值,比如典型的excel格式的sheet[“A3”]、sheet[“B3”]等
准备出发了。。。在if __name__ == '__main__':
process_folder("xmls", "try.xls")