0

私はあなたたちから少し助けが必要です。

プログラミングは初めてなので、私のコードにあまり期待しないでください。

これが問題です。フォルダー内の一連の 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 に書き込むことです。

誰?

4

2 に答える 2

1

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)
于 2012-08-23T11:45:41.623 に答える
0

これを試着してサイズを確認。

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))
于 2012-08-23T11:41:56.087 に答える