目前,我的代码使用XML文件的名称作为参数,以获取该文件,解析其中的一些内容并使用它来重命名所述文件,我的意思是实际运行我的程序一次程序将在目录中搜索每个XML文件(即使它在zip中)并使用相同的参数重命名它,这是我遇到的问题。
#encoding:utf-8
import os, re
from sys import argv
script, nombre_de_archivo = argv
regexFecha = r'\d{4}-\d{2}-\d{2}'
regexLocalidad = r'localidad=\"[\w\s.,-_]*\"'
regexNombre = r'nombre=\"[\w\s.,-_]*\"'
regexTotal = r'total=\"\d+.?\d+\"'
fechas = []; localidades = []; nombres = []; totales = []
archivo = open(nombre_de_archivo)
for linea in archivo.readlines():
fechas.append(re.findall(regexFecha, linea))
localidades.append(re.findall(regexLocalidad, linea))
nombres.append(re.findall(regexNombre, linea))
totales.append(re.findall(regexTotal, linea))
fecha = str(fechas[1][0])
localidad = str(localidades[1][0]).strip('localidad=\"')
nombre = str(nombres[1][0]).strip('nombre=\"')
total = str(totales[1][0]).strip('total=\"')
nombre_nuevo_archivo = fecha+"_"+localidad+"_"+nombre+"_"+total+".xml"
os.rename(nombre_de_archivo, nombre_nuevo_archivo)
编辑:这样的例子就是。
目录只包含3个文件以及程序。
silly.xml amusing.zip feisty.txt
所以,你运行该程序,它忽略了feisty,因为它是一个.txt文件,它读取silly.xml,ti然后解析“fechas,localidad,nombre,total”连接或追加或者其他什么,并使用它作为新的文件为silly.xml,然后程序检查zip是否有xml文件,如果有,那么它会做同样的事情。
所以最后我们会有
20141211_sonora_walmart_2033.xml 20141008_sonora_starbucks_102.xml feisty txt amusing.zip
答案 0 :(得分:2)
您的问题不明确,您发布的代码过于宽泛。
我不能用我的视力调试正则表达式,但是你可以做很多事情来简化代码。简单的代码意味着更少的错误,并且更容易调试。
要找到目标文件,请使用glob.glob
:
files = glob.glob('dir/*.xml')
要解析它们,请抛弃正则表达式并使用ElementTree
API。
import xml.etree.ElementTree as ET
tree = ET.parse('target.xml')
root = tree.getroot()
还有使用CSS表示法和XPATH导航XML文件的模块。使用正则表达式从文件名中提取字段是可以的,但请查看named groups。