簡體   English   中英

讀取特定文件夾中的多個XML文件-Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM