Разобрать несколько xml файлов в папке - PullRequest
0 голосов
/ 09 января 2020

Я новичок и учусь Python. Я работаю над файлами XML (5,754 файла) в папке. Работая с модулем os, я могу напечатать все имена файлов без проблем. Я могу разобрать один файл и записать в файл CSV без проблем. У меня проблема с попыткой разобрать все файлы в папке. Пожалуйста, помогите и спасибо. фрагменты кода и весь приведенный ниже код.

Это прекрасно работает и печатает все 5 754 имен файлов

import os
for path, dirs, files in os.walk(r"C:\Users\dan\Desktop\parse"):
    for f in files:
        clinical = os.path.join(path, f)
        print(clinical)

ВЫХОД: C: \ Users \ dan \ Desktop \ toparse \ ABC0000xxxx \ AB C 00009932. xml C: \ Users \ dan \ Desktop \ toparse \ AB C 0000xxxx \ AB C 00009945. xml C: \ Users \ dan \ Desktop \ toparse \ AB C 0000xxxx \ AB C 00009958. xml

Разбор рабочего кода: запись в CSV

import csv
import xml.etree.ElementTree as ET
import os

tree = ET.parse("ABC00000102.xml")
root = tree.getroot()

with open('names.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)

    for child in root.iter():
        key = child.tag
        value = child.text
        writer.writerow([key, value])

мой код для папки печатает все файлы, но с ошибками ниже кода

import csv
import xml.etree.ElementTree as ET
import os

with open('names.csv', 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)

for path, dirs, files in os.walk(r"C:\Users\dan\Desktop\parse"):
    for f in files:
        clinical = os.path.join(path, f)
        print(clinical)

tree = ET.parse("clinical")
root = tree.getroot()

for child in root.iter():
    key = child.tag
    value = child.text
    writer.writerow([key, value])

ошибки Traceback (последний вызов был последним): файл "C: / Users / dan / PycharmProjects / clins / example.py", строка 14, в дереве = файл ET.parse ("Clinical") "C: \ Users \ dan \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ xml \ etree \ ElementTree.py", строка 1197, в файле parse tree.parse (источник, анализатор) "C: \ Users \ dan \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ xml \ etree \ ElementTree.py ", строка 587, в разборе source = open (source," rb ") FileNotFoundError: [Errno 2 ] Нет такого файла или каталога: «клинический» Proc ess завершен с кодом выхода 1

1 Ответ

0 голосов
/ 09 января 2020

Вы звоните ET.parse("clinical"), который ищет файл с именем «Clinical» в каталоге, в котором вы сейчас работаете.

Если вы хотите, чтобы он открыл путь, указанный в clinical Вместо этого вместо переменной вам нужно будет сделать ET.parse(clinical).

Кроме того, если вы хотите проанализировать каждый найденный файл, вам нужно исправить отступы, чтобы убедиться, что это происходит в for-l. oop. В настоящее время ваш код будет анализировать только последний найденный файл в каталоге, потому что ваш анализ выполняется после l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...