Das Erstellen eines Codes unterhalb eines Community-Mitglieds hier half mir bei der Feinabstimmung, um eine Funktion zu erstellen, die einen Wörterbuchwert aus einer Textdatei nimmt und dann durch diesen Wert nach einer Liste von Dateien sucht. Dies war der Code, in dem ich alle gefundenen Werte an dasselbe Blatt anfügte.Wie erstellt man verschiedene Dateien für jedes Mal, wenn eine Funktion für ein Element in einer for-Schleife ausgeführt wird?
import csv
import glob
import ast
from os.path import isfile
from lxml import etree
def look_for_speaker_in_files(speakerAttrib):
speakerDict = ast.literal_eval(speakerAttrib)
l_file_exists = False
if isfile("allspeakers.csv"):
l_file_exists = True
c = csv.writer(open("allspeakers.csv","a"))
if not l_file_exists:
c.writerow(["Name", "Filename", "Text"])
lparser = etree.XMLParser(recover=True)
for cr_file in glob.iglob('parsed/*.xml'):
try:
tree = etree.parse(cr_file,parser=lparser)
for node in tree.iter('speaking'):
if node.keys() == speakerDict.keys():
c.writerow([node.attrib, cr_file, node.text])
else:
continue
except:
print "bad string " + cr_file
raise
def main():
with open("speaking-basic.txt","r") as speaker_list:
for x in speaker_list:
print x
look_for_speaker_in_files(x)
if __name__ == "__main__":
main()
Jetzt suche ich eine andere Datei für jedes Element aus der Textdatei zu erstellen, und aus der Textdatei nur die Spiele für die Knoten in den Akten, das Element abzulagern.
Ich versuchte den folgenden Code, wo ich die Funktion änderte, die durch die Dateien liest, um es zu versuchen, das Argument für den Dateinamen und das Argument für das Element aus der Textdatei zu suchen. Ich änderte dann den Code, der das Element aus der Liste nimmt, um sowohl das Element aus der Liste zu lesen, als auch um einen Dateinamen zu erstellen, der dem Wert der Wörterbuchelemente in der Datei entspricht.
import csv
import glob
import ast
from os.path import isfile
from lxml import etree
def look_for_speaker_in_files(speakerAttrib,file_name):
speakerDict = ast.literal_eval(speakerAttrib)
l_file_exists = False
if isfile(file_name + ".csv"):
l_file_exists = True
c = csv.writer(open(file_name + ".csv","a"))
print c
if not l_file_exists:
c.writerow(["Name", "Filename", "Text"])
lparser = etree.XMLParser(recover=True)
for cr_file in glob.iglob('parsed/*.xml'):
try:
tree = etree.parse(cr_file,parser=lparser)
for node in tree.iter('speaking'):
if node.keys() == speakerDict.keys():
c.writerow([node.attrib, cr_file, node.text])
else:
continue
except:
print "bad string " + cr_file
raise
def main():
with open("speaking.txt","r") as speaker_list:
for x in speaker_list:
print x
dictx = ast.literal_eval(x)
valuex = str(dictx.values()).format()
print valuex
look_for_speaker_in_files(x,valuex)
if __name__ == "__main__":
main()
Ich habe auch versucht die Suche durch die Dateien-Funktion auf das gleiche Argument zu halten, aber eine Variable hinzufügen, die von diesem Argument mit dem Dateinamen kam, aber das hat nicht funktioniert auch.
import csv
import glob
import ast
from os.path import isfile
from lxml import etree
def look_for_speaker_in_files(speakerAttrib):
speakerDict = ast.literal_eval(speakerAttrib)
file_name = str(speakerDict.values()).format()
l_file_exists = False
if isfile(file_name + ".csv"):
l_file_exists = True
c = csv.writer(open(file_name + ".csv","a"))
if not l_file_exists:
c.writerow(["Name", "Filename", "Text"])
lparser = etree.XMLParser(recover=True)
for cr_file in glob.iglob('parsed/*.xml'):
try:
tree = etree.parse(cr_file,parser=lparser)
for node in tree.iter('speaking'):
if node.keys() == speakerDict.keys():
c.writerow([node.attrib, cr_file, node.text])
else:
continue
except:
print "bad string " + cr_file
raise
def main():
with open("speaking-basic.txt","r") as speaker_list:
for x in speaker_list:
print x
look_for_speaker_in_files(x)
if __name__ == "__main__":
main()
Während diese Codes, um die Dateien, mit all meinem futzing mit ihm schaffen scheine ich nur in der Lage sein, es zu bekommen entweder nichts in den Akten zu legen, aber die Spaltenüberschriften oder die Lautsprecher alle aus den XML-Dateien setzen in jedem einzelnen, nicht nur dem, den ich in die Funktion gesteckt habe. Außerdem kann ich den Dateinamen nicht ohne die [''] erstellen.
Ich habe die XML-Dateien die Funktion mit den Werten durch und die Textdatei sucht ich hier auf der Google-Verbindung stehe auf: https://drive.google.com/open?id=0B7lGA34vOZItREhRbmF6Z3YtTnM
Jede Hilfe auf diesem würde Super klar sein, danke!
ah, das sieht aus wie es behebt, danke –
Cool. Außerdem würde ich bitten, meine Antwort auf die andere Frage als die richtige zu wählen, da Sie, da Sie sie losgerissen haben, mir 15 Punkte gegeben haben. Ich hoffe du hast es verstanden :-). – pmaniyan