Ich bin neu in Python, habe aber einige Erfahrungen mit Delphi. Ich versuche, ein Skript zu machen, das in der Lage wäre, alle XML-Dateien im Verzeichnis (einschließlich aller Unterverzeichnisse in diesem Verzeichnis) zu durchsuchen, dann diese XML zu analysieren und einige Daten (Zahlen) von dort in eine einfache TXT-Datei zu speichern. Danach arbeite ich durch diese TXT-Datei, um eine weitere TXT-Datei mit nur einem eindeutigen Zahlensatz aus der zuvor erstellten TXT-Datei zu erstellen.Parsen aller XML-Dateien im Verzeichnis und allen Unterverzeichnissen
ich dieses Skript erstellt:
import os
from xml.dom import minidom
#for testing purposes
directory = os.getcwd()
print("Procházím aktuální adresář, hledám XML soubory...")
print("Procházím XML soubory, hledám IČP provádějícího...")
with open ('ICP_all.txt', 'w') as SeznamICP_all:
for root, dirs, files in os.walk(directory):
for file in files:
if (file.endswith('.xml')):
xmldoc = minidom.parse(file)
itemlist = xmldoc.getElementsByTagName('is')
SeznamICP_all.write(itemlist[0].attributes['icp'].value + '\n')
print("Vytvářím list unikátních IČP...")
with open ('ICP_distinct.txt','w') as distinct:
UnikatniICP = []
with open ('ICP_all.txt','r') as SeznamICP_all:
for line in SeznamICP_all:
if line not in UnikatniICP:
UnikatniICP.append(line)
distinct.write(line)
print('Počet unikátních IČP:' + str(len(UnikatniICP)))
input('Pro ukončení stiskni libovolnou klávesu...')
Es ist, als nur intented arbeitet, bis ein Unterverzeichnis ist, in diesem Fall, dass ich Fehler:
FileNotFoundError: [Errno 2] No such file or directory: 'RNN38987.xml'
, die dadurch verursacht wird, dass Datei im Unterverzeichnis, nicht in einem Verzeichnis mit Python-Skript. Ich habe versucht, es über den Pfad funktioniert absoluten Pfad der Datei mit zur Arbeit zu kommen, aber ich bin mehr Fehler bekommen, sehen Sie das Skript:
import os
from xml.dom import minidom
from pathlib import Path
#for testing purposes
directory = os.getcwd()
print("Procházím aktuální adresář, hledám XML soubory...")
print("Procházím XML soubory, hledám IČP provádějícího...")
with open ('ICP_all.txt', 'w') as SeznamICP_all:
for root, dirs, files in os.walk(directory):
for file in files:
if (file.endswith('.xml')):
soubor = Path(file).resolve()
print(soubor)
xmldoc = minidom.parse(soubor)
itemlist = xmldoc.getElementsByTagName('is')
SeznamICP_all.write(itemlist[0].attributes['icp'].value + '\n')
print("Vytvářím list unikátních IČP...")
with open ('ICP_distinct.txt','w') as distinct:
UnikatniICP = []
with open ('ICP_all.txt','r') as SeznamICP_all:
for line in SeznamICP_all:
if line not in UnikatniICP:
UnikatniICP.append(line)
distinct.write(line)
print('Počet unikátních IČP:' + str(len(UnikatniICP)))
input('Pro ukončení stiskni libovolnou klávesu...')
Der Fehler, den ich jetzt bekomme ich nicht wirklich verstehen und Google hilft auch nicht - ganzes Protokoll:
Procházím aktuální adresář, hledám XML soubory...
Procházím XML soubory, hledám IČP provádějícího...
C:\2_Programming\Python\IČP FINDER\src\20150225_1815_2561_1.xml
Traceback (most recent call last):
File "C:\2_Programming\Python\IČP FINDER\src\ICP Finder.py", line 17, in <module>
xmldoc = minidom.parse(soubor)
File "C:\2_Programming\Python\Interpreter\lib\xml\dom\minidom.py", line 1958, in parse
return expatbuilder.parse(file)
File "C:\2_Programming\Python\Interpreter\lib\xml\dom\expatbuilder.py", line 913, in parse
result = builder.parseFile(file)
File "C:\2_Programming\Python\Interpreter\lib\xml\dom\expatbuilder.py", line 204, in parseFile
buffer = file.read(16*1024)
AttributeError: 'WindowsPath' object has no attribute 'read'
Können Sie mir bitte helfen?
Abgesehen: 'UnikatniICP = set()'/'UnikatniICP.add (Linie)' könnte schneller gehen. Wenn Ihnen die Reihenfolge egal ist, können 'distinct.writelines (set (SeznamICP_all))' am schnellsten gehen. –