【发布时间】:2017-02-22 01:16:09
【问题描述】:
似乎vehicles.write(cars_file) 和vehicles = cars_Etree.parse(cars_file) 的文件名有问题:
import argparse
import xml.etree.ElementTree as cars_Etree
# elementTree not reading xml file properly
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
dest='file_name',
action='store',
help='File name',
metavar='FILE'
)
parser.add_argument(
'car_make', help='car name')
args = parser.parse_args()
with open(args.file_name, 'r') as cars_file:
vehicles = cars_Etree.parse(cars_file)
cars = vehicles.getroot()
for make in cars.findall(args.car_make):
name = make.get('name')
if name != args.car_make:
cars.remove(make)
with open(args.file_name, 'w') as cars_file:
vehicles.write(cars_file)
错误:
Traceback (most recent call last):
File "/Users/benbitdiddle/PycharmProjects/VehicleFilter/FilterTest.py", line 23, in <module>
vehicles = cars_Etree.parse(cars_file)
File "/Applications/anaconda/lib/python3.5/xml/etree/ElementTree.py", line 1184, in parse
tree.parse(source, parser)
File "/Applications/anaconda/lib/python3.5/xml/etree/ElementTree.py", line 596, in parse
self._root = parser._parse_whole(source)
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0
我试图过滤的 XML 文件位于同一个项目文件夹中。我尝试提供带有文件名的路径,但仍然无效。
<?xml version="1.0" encoding="UTF-8"?>
<cars>
<make name="toyota">
<model name="tacoma" />
<model name="tundra" />
</make>
<make name="ford">
<model name="escort" />
<model name="taurus" />
</make>
<make name="chevy">
<model name="silverado" />
<model name="volt" />
</make>
</cars>
【问题讨论】:
-
出于某种原因,它会创建一个空白文件并尝试对其进行解析。我的目标是让它覆盖现有文件。
-
至少为了测试,使用不同的文件名进行读写。如果您怀疑问题出在
argparse,请打印args。否则删除那部分代码并专注于ElementTree调用。换句话说,隔离问题。
标签: python xml argparse elementtree