0

ここでコミュニティーのメンバーがここで作成したコードをビルドすると、テキストファイルから辞書の値を取得し、その値を調べてファイルのリストを探す関数を作成するのに役立ちました。これは、同じシートに見つかったすべての値を追加するコードでした。forループ内の項目に対して関数が実行されるたびに異なるファイルを作成する方法は?

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() 

は、今私は、テキストファイルからその項目に、テキストファイルから項目ごとに別のファイルを作成し、ファイルのみのノードの一致を堆積させるために探しています。

私は以下のコードを試してみました。ファイルを読み取ってファイル名の引数と項目の引数の両方を検索する関数を変更しました。次に、リストから項目を読み込んでリストから項目を取り出すコードを変更し、ファイル内の辞書項目の値であるファイル名を作成するようにしました。

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() 

私も同じ単一の引数にファイルの機能を見を維持しようとしましたが、その引数からファイル名を思い付いた変数を追加するだけでなく、動作しませんでしたという。これらのコードは、ファイルを作成しながら

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() 

、それにすべての私のfutzingと私はそれを得るのいずれかのファイルが、列のヘッダーに何も入れていない、またはXMLファイルからすべてのスピーカーを置くことができるように見えますそれぞれの中に、私がその機能に入れたものだけではありません。また、私はそれの周りに['']のないファイル名を作成することはできません。

私は、XML関数が通って、私はここにGoogleのリンクで探しています値を持つテキストファイル検索しているファイルがあります。 https://drive.google.com/open?id=0B7lGA34vOZItREhRbmF6Z3YtTnM

この上の任意のヘルプは、スーパーいただければ幸いです、ありがとうございました!

答えて

1

あなたの要件が正しく理解されているかどうかわかりません。このコードが行うことは、speaking-basic.txtで与えられた属性に関して、解析されたxmlの属性を見つけることです。属性名とその値がspeaking-basic.txtとxmlの両方で一致する場合は、Speakerの名前のファイルに出力します。

これがあなたが探していたものかどうかを確認してください。正しく理解していない可能性があります。もしそうなら、スクリーンショットやサンプルで期待される出力をはっきりと理解してください。

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()[0]).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(): 
       if node.values() == speakerDict.values(): 
        c.writerow([node.attrib, cr_file, node.text]) 
       else: 
        continue 
      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() 
+0

ああ、それはそれを修正するように見える、ありがとう –

+0

クール。また、他の質問に対する答えを、あなたがそれを打ち切ったので、-15点を与えてくれたので、私は親切に答えを選んでください。私はあなたがundertandを望む:-)。 – pmaniyan

関連する問題