[英]Reading multiple XML files in a specific folder - Python
我需要你們的一點幫助。
我是編程新手,所以不要對我的代碼有太多期望。
這就是問題,我需要解析文件夾中的一堆XML文件並將其寫入.xls或.csv。 到目前為止,我已經解析出xml並將其寫入.txt,但是我使用它的文件位於該程序所在的文件夾中。
這是代碼:
from xml.dom import minidom
from datetime import *
ano = int(input("Year: "))
mes = int(input("Month: "))
dia = int(input("Day: "))
dt_obj = datetime(ano, mes, dia)
date_str = dt_obj.strftime("%Y-%m-%d")
#Extracting the information from the XML nodes
xmldoc = minidom.parse("NAME OF THE FILE.XML")
NFe = xmldoc.getElementsByTagName("NFe")[0]
infNFe = NFe.getElementsByTagName("infNFe")[0]
ide = infNFe.getElementsByTagName("ide")[0]
nNF = ide.getElementsByTagName("nNF")[0].firstChild.data
dEmi = ide.getElementsByTagName("dEmi")[0].firstChild.data
serie = ide.getElementsByTagName("serie")[0].firstChild.data
emit = infNFe.getElementsByTagName("emit")[0]
cnpj = emit.getElementsByTagName("CNPJ")[0].firstChild.data
nfeProc = xmldoc.getElementsByTagName("nfeProc")[0]
chNFe = nfeProc.getElementsByTagName("chNFe")[0].firstChild.data
try:
# This will create a new file or **overwrite an existing file**.
f = open(date_str+".txt", "w")
try:
f.write("CNPJ: "+cnpj) # Write a string to a file
f.writelines("\nNUMERO DA NOTA: "+nNF)
f.write("\nDATA DE EMISSAO: "+dEmi)
f.write("\nSERIE: "+serie)
f.write("\nCHAVE ELETRONICA: "+chNFe)
finally:
f.close()
except IOError:
pass
我已經成功讀取了XML,對其進行了解析,並從我需要的節點中寫入了信息。
我現在需要的是讀取其中的一堆文件夾並在.XLS上書寫
任何人?
如果xml文件位於單個文件夾中,則可以執行以下操作:
import os
import sys
def select_files_in_folder(dir, ext):
for file in os.listdir(dir):
if file.endswith('.%s' % ext):
yield os.path.join(dir, file)
for file in select_files_in_folder(sys.argv[1], 'xml'):
process_xml_file(file)
或者,如果文件可以在子文件夾中,請使用:
def select_files_in_subfolders(dir, ext):
for root, dirs, files in os.walk(dir):
for file in files:
if file.endswith('.%s' % ext):
yield os.path.join(dir, file)
試試看這個尺寸。
from xml.dom import minidom
from datetime import *
ano = int(input("Year: "))
mes = int(input("Month: "))
dia = int(input("Day: "))
dt_obj = datetime(ano, mes, dia)
date_str = dt_obj.strftime("%Y-%m-%d")
#Extracting the information from the XML nodes
def get_files(d):
return [os.path.join(d, f) for f in os.listdir(d) if os.path.isfile(os.path.join(d,f))]
def parse(files):
for xml_file in files:
xmldoc = minidom.parse(xml_file)
NFe = xmldoc.getElementsByTagName("NFe")[0]
infNFe = NFe.getElementsByTagName("infNFe")[0]
ide = infNFe.getElementsByTagName("ide")[0]
nNF = ide.getElementsByTagName("nNF")[0].firstChild.data
dEmi = ide.getElementsByTagName("dEmi")[0].firstChild.data
serie = ide.getElementsByTagName("serie")[0].firstChild.data
emit = infNFe.getElementsByTagName("emit")[0]
cnpj = emit.getElementsByTagName("CNPJ")[0].firstChild.data
# now whatever you want...
parse(get_files(DIRECTORY))
DIRECTORY是XML文件所在的位置。
由於這只是代碼的一部分,因此您需要自己填寫其余部分。 您尚未完全提供要編寫的內容或要編寫的格式...。
可以幫助您編寫CSV文件的方法:
# csv_lovation is a location os a *.csv file, and contents is a list of lists:
# ( [ ["row1 item1", "row1 item2", "row1 item3"], ["row2 item1", "row2 item2", "row2 item3"] ] )
def write_csv(csv_location, contents):
with open(csv_location, "w") as file_writer:
file_writer.write("Header,Items,Here\n") #if you have no need for a header, remove this line.
for line in contents:
file_writer.write("%s\n" % ",".join(line))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.