python3 读取XML文件的入坑经历
背景
由于需要从XML文件里,读取图片的列表。
需要读取xml里的路径,依次处理图片
所以,开始python xml文件的操作
开始时使用命令行的形式,读取xml文件的路径,然后判断文件是否存在,存在,就解析。
手写BUG
print(sys.argv)
if len(sys.argv) >= 2:
xml_file_path = sys.argv[0] # 注意,0是这个文件的本身!
if os.path.exists(xml_file_path):
xml_file_exist = True
print(xml_file_exist)
print("xml path is exist!")
else:
xml_file_path = ''
print("xml path not exist!")
问题分析
命令行参数传错了,xml_file_path = sys.argv[1],才是传入的xml文件的路径,如果是sys.argv[0],那么,是执行的python文件本身!!
所以,文件存在,但是,文件解析失败!!并且是第一行第一列解析失败!!,最后我把XML文件删的只剩一行,依旧解析失败!!开始怀疑人品了。
文件编码,怎么改都不行!
最后,我用文件读取的方式读下xml文件内容,我惊住了,打印的怎么是我敲的代码!!
原来如此!!参数赋值错了。
正确的方法: sys.argv[1] 才是第一个参数, 如 python xxx.py param,想获取param,需要:val = sys.argv[1]。
XML文件读取
这里使用:xml.etree.ElementTree
import xml.etree.ElementTree as ET
需要读取的xml文件
<images>
<file format="argb8888" path="app.png"/>
<file format="argb8888" path="dcm.png"/>
<file format="argb8888" path="icon.png"/>
<file format="argb8888" path="res/images/btn_nor.9.png"/>
</images>
正确读取的函数
def pkg_png_to_hdc_from_xml(_path, xml_file):
xml_file_path = os.path.join(_path, xml_file)
if not os.path.exists(xml_file_path):
sys.stdout.write("[xml] pkg_parse_xml_file failed! \n")
return
with open(xml_file_path, 'r+', encoding='utf-8') as f:
xml_info = f.read()
tree = ET.fromstring(xml_info)
for child in list(tree):
img_file = os.path.join(_path, child.get('path'))
img_type = " -f " + child.get('format')
if os.path.exists(img_file):
cmd = app_pkg_gen_cmd(pkg_get_png_to_hdc_tool_path(), " -i ", img_file, img_type)
execute_command(cmd)
os.remove(img_file)
f.close()
os.remove(xml_file_path)
总结
遇到文件,多打印信息,从而定位问题。
python功能很强大,后期多多使用
pycharm很专业,python语法提示、自动补全,都优于python 默认的IDE。