【问题标题】:Using a python program to rename all XML files within a linux directory使用 python 程序重命名 linux 目录中的所有 XML 文件
【发布时间】:2014-06-05 21:45:57
【问题描述】:

目前,我的代码使用 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 好斗的txt amusing.zip

【问题讨论】:

  • 显示输入(文件名列表)和预期输出(修改后的文件名)是有意义的。
  • 您还需要close打开的文件。
  • 我编辑了类似的东西作为例子。

标签: python xml linux rename


【解决方案1】:

你的问题不清楚,你贴的代码太宽泛了。

我无法用我的视力调试正则表达式,但您可以做很多事情来简化代码。简单的代码意味着更少的错误,更容易调试。

要定位您的目标文件,请使用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

【讨论】:

  • 元素树从代码中修剪了很多脂肪,很好的答案。 glob.glob 创造了奇迹。
猜你喜欢
  • 2014-12-30
  • 2023-03-04
  • 1970-01-01
  • 2014-05-16
  • 2015-03-21
  • 2015-02-28
  • 1970-01-01
  • 2014-11-08
  • 2014-10-09
相关资源
最近更新 更多