Как удалить повторяющиеся имена файлов из разных каталогов в списке и использовать их один раз в качестве текста тега XMPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как удалить повторяющиеся имена файлов из разных каталогов в списке и использовать их один раз в качестве текста тега XM

Сообщение Anonymous »

У меня есть дерево файлов типа:

Код: Выделить всё

2_Product
2-1_CategoryName1_Product
2-1-1_Name1_Product
LLL_nomenclature1_product.zip
LLL_nomenclature1_product (folder)
notice_nomenclature1.pdf
LLL_nomenclature1_product_metadata.xml
LLL_nomenclature2_product.zip
LLL_nomenclature2_product (folder)
notice_nomenclature2.pdf
LLL_nomenclature2_product_metadata.xml
LLL_nomenclature3_product.zip
LLL_nomenclature3_subproduct1 (folder)
notice_nomenclature3.pdf
LLL_nomenclature3_subproduct2 (folder)
notice_nomenclature3.pdf
LLL_nomenclature3_subproduct3 (folder)
notice_nomenclature3.pdf
LLL_nomenclature3_product_metadata.xml
... etc
2-1-2_Name2_Product
2-1-3_ ...etc
2-2_CategoryName2_Product
2-2-1_ ...
2-2-2_ ...
... etc

У меня есть сценарий, который ищет в моих заархивированных папках файлы notice_nomenclatureX.pdf, а затем добавляет в XML-файл соответствующего продукта тег с именем соответствующего уведомления ( вот, например, notice_nomenclature1.pdf).

Код: Выделить всё

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

for root, dirs, files in os.walk("."):
for folder_ext in files:
if folder_ext[-4:] == '.zip' and folder_ext[:3] == 'LLL':
filePath3 = os.path.join(root, folder_ext)
zip_folder = zipfile.ZipFile(filePath3)
zipfile_paths = zip_folder.namelist()
for paths in zipfile_paths:
zipfiles = os.path.basename(paths)
if zipfiles[-4:] == '.pdf' and zipfiles[:3] == 'not':
notice_name = zipfiles
for prdt in files:
if prdt[-4:] == '.xml' and prdt[:-13] == folder_ext[:-4] :
filePath4 = os.path.join(root, prdt)
xml_produit = ET.parse(filePath4)
root_produit = xml_produit.getroot()
notice_tag = ET.SubElement(root_produit, "notice_pdf")
notice_tag.text = notice_name
ET.indent(root_produit)
xml_produit.write(filePath4, encoding='utf-8', xml_declaration=True, method='xml', short_empty_elements=False)
Мой сценарий хорошо работает для «номенклатуры1» и «номенклатуры2» и выдает это в моем XML (то, что я хочу):

Код: Выделить всё


.
.
.
notice_nomenclature1.pdf

Но для «номенклатуры3» я получаю (то, чего не хочу):

Код: Выделить всё


.
.
.
notice_nomenclature3.pdf
notice_nomenclature3.pdf
notice_nomenclature3.pdf

Как мне написать в своем скрипте, что, когда переменная 'zipfiles' содержит одно и то же имя уведомления несколько раз, она транскрибирует только одно из них в тег xml?
Я пробовал использовать .sort() и сортировать, но безрезультатно.
И я пробовал это:

Код: Выделить всё

...
new_list = []
for paths in zipfile_paths:
zipfiles = os.path.basename(paths)
if zipfiles[-4:] == '.pdf' and zipfiles[:3] == 'not':
if zipfiles not in new_list:
new_list.append(zipfiles)
notice_name = new_list
... etc
"notice_nomenclature3.pdf" появляется только один раз в "new_list", но когда я запускаю сценарий, у него возникает проблема с форматом списка, и он возвращает следующую ошибку:

Код: Выделить всё

TypeError: write() argument must be str, not list
Знаете ли вы, как мне добиться желаемого результата?

Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ist-and-us
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»