Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9

Как из нескольких xml файлов записать только уникальное содержание тегов в один txt файл

07.10.2025, 19:09. Показов 1076. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Как из нескольких xml-файлов записать только уникальное содержание тегов (то есть, без повторов) в один txt-файл.

(В продолжение к Как из нескольких xml файлов записать содержание тегов в один txt файл)

new1.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<employees>
  <employee>
    <name>John</name>
    <department>Marketing</department>
    <position>Manager</position>
  </employee>
<employee>
    <name>John</name>
    <department>XXX</department>
    <position>YYY</position>
  </employee>
  <employee>
    <name>Mary</name>
    <department>Finance</department>
    <position>Analyst</position>
  </employee>
</employees>
new2.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
<employees>
  <employee>
    <name>Paul</name>
    <department>Development</department>
    <position>Developer</position>
  </employee>
  <employee>
    <name>Lisa</name>
    <department>Creation</department>
    <position>Designer</position>
  </employee>
</employees>
forallnew.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import glob
import xml.etree.ElementTree as ET
 
paths = "*.xml"
filenames = glob.glob(paths)
 
 
with open("myfile3.txt", "w", encoding="utf-8") as output_file:
    line_count = 0
    
   
    for filename in filenames:
        with open(filename, 'r', encoding="utf-8") as content:
            tree = ET.parse(content)
            
        
        for name_element in tree.findall(".//name"): 
            name_text = name_element.text
            unique_list = list(name_text)
            def unique_list(input_list):
                  output_list = []
                  for word in input_list:
                     if word not in output_list:
                        output_list.append(word)
                  print(output_list)
                  return output_list
            print(name_text)
            output_file.write(name_text + '\n')
            line_count += 1
 
    
    
    output_file.write(f"Count of lines: {line_count}\n")
 
print(f"Count of lines: {line_count}")



myfile3.txt
___________________________

John
John
Mary
Paul
Lisa
Count of lines: 5

___________________________






Задача заключается в том, чтобы получить вот такой вариант:


myfile3.txt
_____________________

John
Mary
Paul
Lisa
Count of lines: 4

_____________________

то есть, имя John должно быть одно в списке

Подскажите пожалуйста, как это сделать?
Укажите, пожалуйста, на ошибки и прокомментируйте почему не работает? Благодарю
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2025, 19:09
Ответы с готовыми решениями:

Как из нескольких xml файлов записать содержание тегов в один txt файл
Добрый день! Как из нескольких xml-файлов записать содержание тегов в один txt-файл new1.xml...

Замена значения одного тега, значением из другого тега в XMl файле
Добрый день! Подскажите, есть xml файл (много тысяч строк), в нем есть справки по нумерации, в...

Вывести только те буквы двух слов, которые встречаются в обоих словах только один раз
Добрый день! Помогите решить, пожалуйста. Задано два слова. Составить программу, которая...

18
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
08.10.2025, 09:23
А что мешает потом преобразовать с помощью set?
Python
1
2
3
4
items = [John, John,Mary,Paul,Lisa]
unique_items = list(set(items))
 
print(unique_items)
или если порядок нужен, через
Python
1
2
3
4
items = [John, John,Mary,Paul,Lisa]
unique_items = list(dict.fromkeys(items))
 
print(unique_items)
1
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 313
08.10.2025, 09:42
Python
1
2
3
4
5
6
7
from pathlib import Path
import xml.etree.ElementTree as ET
 
directory_path = Path("test_folder")
names = list({name.text for xml_file_path in directory_path.glob('*.xml') for name in ET.parse(xml_file_path).findall(".//name")})
names.append(str(len(names)))
Path(directory_path/"myfile3.txt").write_text('\n'.join(names))
1
 Аватар для s_t_r_a_j
526 / 179 / 58
Регистрация: 12.02.2023
Сообщений: 641
08.10.2025, 09:50
Лучший ответ Сообщение было отмечено utagawa как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import glob
import xml.etree.ElementTree as ET
 
paths = "*.xml"
filenames = glob.glob(paths)
 
with open("myfile3.txt", "w", encoding="utf-8") as output_file:
    line_count = 0  
    output_list = []
    for filename in filenames:
        with open(filename, 'r', encoding="utf-8") as content:
            tree = ET.parse(content)
        for name_element in tree.findall(".//name"): 
            name_text = name_element.text
            if name_text not in output_list:
                output_list.append(name_text)
                print(name_text)
                output_file.write(name_text + '\n')
                line_count += 1
    
    output_file.write(f"Count of lines: {line_count}\n")
 
print(f"Count of lines: {line_count}")
1
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
08.10.2025, 15:35  [ТС]
s_t_r_a_j, будьте добры, объясните, пожалуйста, почему данный код работает?
Объясните, пожалуйста, добавление

Python
1
output_list = []
и

Python
1
2
if name_text not in output_list:
   output_list.append(name_text)
Мне нужно понять
Спасибо
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
08.10.2025, 19:01
Цитата Сообщение от utagawa Посмотреть сообщение
output_list = []
ну явно указывает переменной output_list, что это список = []
if = если name_text not = некая переменная in output_list: = находится в писке с именем ... :=тогда
output_list.append(name_text)=в этот список добавить эти данные, ок?
1
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
09.10.2025, 09:42  [ТС]
Объясните, пожалуйста, какая строчка кода отвечает за вывод только уникальных значений? Где в коде то самое место? Спасибо
0
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
09.10.2025, 10:13
Цитата Сообщение от utagawa Посмотреть сообщение
Объясните, пожалуйста, какая строчка кода отвечает за вывод только уникальных значений? Где в коде то самое место? Спасибо
Python
1
if name_text not in output_list:
Но это нерационально. Проще полученный список отфильтровать с помощью множеств (set) или словарей, по ключу
1
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
09.10.2025, 10:26  [ТС]
Может быть, кто-то знает, почему такой код работает:

Python
1
2
3
4
5
output = []
for x in trends:
    if x not in output:
        output.append(x)
print(output)
К слову, нашёл решение задачи ещё и здесь, и пример оттуда
https://stackoverflow.com/ques... -in-python

Но объяснения почему этот код работает там тоже нет)


Вопрос: Почему он выводит уникальные значения?

Да, решение найдено, но мне нужно объяснение))
Возможно, есть ссылка на то, где это объясняется?

Всем спасибо за помощь
0
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
09.10.2025, 10:38
Цитата Сообщение от utagawa Посмотреть сообщение
Но объяснения почему этот код работает там тоже нет)
Стоит подумать вам о занятии чем то другим.
Цитата Сообщение от utagawa Посмотреть сообщение
if x not in output:
Перевожу на русский
Python
1
2
3
4
5
output = []
for x in trends:
    if x not in output: # Если значение х не входит в список output
        output.append(x) # добавить х в output
print(output)[/quote]
Сначала почитайте про типы переменных в пайтон, структуры данных. Потом начинайте код писать.
1
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
09.10.2025, 10:45  [ТС]
Спасибо
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
09.10.2025, 10:48
в этой строке print(output)[/quote]
[/quote] - конечно же лишнее, прицепилось....
Цитата Сообщение от ViachaslauK Посмотреть сообщение
if x not in output: # Если значение х не входит в список output
        output.append(x) # добавить х в output
можно решить как сказали с помощью set - но тогда в выводе порядок измениться рандомно
1
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
09.10.2025, 11:08
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
можно решить как сказали с помощью set - но тогда в выводе порядок измениться рандомно
А если бы ты внимательно прочитал пост до конца, то там же нашел бы решение с сохранением порядка элементов.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
09.10.2025, 11:34
Цитата Сообщение от ViachaslauK Посмотреть сообщение
там же нашел бы решение с сохранением порядка элементов
это в трёх словах?
Цитата Сообщение от ViachaslauK Посмотреть сообщение
словарей, по ключу
если да поинтересуйтесь у ТС понял ли что сие означает и как его воплотить в жизнь?
0
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
09.10.2025, 12:29
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
это в трёх словах?
Мне непонятен твой слэнг. Видимо потому что русский мой не родной язык)))
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
если да поинтересуйтесь у ТС понял ли что сие означает и как его воплотить в жизнь?
ТС не знает основы пайтон, какая разница в таком случае - множества или словари? Достаточно скопировать код и вставить. И вопрос был к тебе а не к нему.
0
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
09.10.2025, 13:01  [ТС]
Всем спасибо!)
Честно, внятного объяснения не получил.

Киньте, хотя бы, точную ссылку - место в источнике, где говорится о том, как output_list связан с выбором уникальных записей

Вы мне ссылку точную дайте - я почитаю
0
 Аватар для ViachaslauK
129 / 187 / 17
Регистрация: 08.10.2024
Сообщений: 714
09.10.2025, 13:15
Цитата Сообщение от utagawa Посмотреть сообщение
как output_list связан с выбором уникальных записей
Он никак не связан с выбором уникальных значений. Это образно говоря, твой карман, в который ты кладешь монетки. И перед тем как положить, проверяешь, есть ли такая там. Если есть - пропускаешь, если нет- добавляешь.
Множество же или ключи словаря - это всегда уникальные значения, в этом случае работа по проверке уникальности будет сделана за тебя.
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
09.10.2025, 14:51
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Python
1
2
3
4
5
output = []
for x in trends:
    if x not in output: # Если значение х не входит в список output
        output.append(x) # добавить х в output
print(output)
этот код нужно в отладчике прогнать, ЭФ 8, или ЭФ 9 в Пайчарме, если например в output = [] находится output = ["1", "2"]
то в цикле for x in trends х сначала будет 1, затем 2 и там же в цикле ниже условие if x
1
0 / 0 / 0
Регистрация: 02.10.2025
Сообщений: 9
09.10.2025, 14:51  [ТС]
ViachaslauK, спасибо!
Теперь понял
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2025, 14:51
Помогаю со студенческими работами здесь

Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз
Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один...

Дан текст на русском языке. Выбрать из него только те символы, которые встречаются в нем только один раз, в том порядке,
Дан текст на русском языке. Выбрать из него только те символы, которые встречаются в нем только...

Используя map/filter/reduce из несколько одинаковых подряд идущих элементов оставить только один
Используя map/filter/reduce из несколько одинаковых подряд идущих элементов оставить только один....

Как нескольким QDoubleSpinBox задать уникальные переменные?
В общем, пишу интерфейс для расчётов своих и вот какая вещь: на нескольких QTabWidget распологается...

Как прочитать файл с таким содержанием
Есть файл (франц. и рус.): 17 : lecteur biométrique d'empreintes digitales - сканер отпечатков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru