使用python程序重命名linux目录中的所有XML文件

时间:2014-04-21 19:01:12

标签: python xml linux rename

目前,我的代码使用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

1 个答案:

答案 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