【问题标题】:elementTree is not opening and parsing my xml fileelementTree 没有打开和解析我的 xml 文件
【发布时间】: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


【解决方案1】:

现在工作正常,但我仍在改进它。谢谢你

我在 main.py 中做了这个修改:

path = "/Users/benbitdiddle/PycharmProjects/VehicleFilter/"
CF = CarFilter(path+args.file_name, args.car_make)
CF.filterCar()

并在 CarFilter.py 类文件中将 'w' 更改为 wb':

    with open(self.file_name, 'wb') as car_file:
        self.vehicles.write(car_file)

【讨论】:

  • 我隔离了这个问题,这几乎成了一个项目本身;但我学会了
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2021-02-08
  • 2017-01-16
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2010-09-16
相关资源
最近更新 更多