2017-11-09 2 views
1

は、私が入ったファイルtest.txtを持って言う:どのようにファイル名をそのような形式の単語の内容でpythonで出力できますか?

1:text1.txt 
2:text2.txt 

text1.txtが含まれています

I am a good person 

text2.txtは含まれています

Bla bla 

私は、出力したいと思います:

I 1 
Bla 2  
am 1  
bla 2  
good 1 
a 1 
person 1 

ファイルの各単語を含むファイルインデックスを出力する場合と同じです。私は自分のコードを投稿するだろうが、それはとても醜く、解決策からは遠い。私はpythonには新しく、素敵になれてください。出力の指定された順序はありません。私が言及したサンプル出力は、私が探しているもののアイデアを得るためにまったくランダムです。

これをfとして( "TEXT.TXT"、 "R")のオープンで `私のコード

です: テキスト= f.readlines()

for line in text: 
    splitted=line.split(":") 

splitsplit=splitted[1].split("\n") 
files=splitsplit[0] 

splittedindicies=splitted[0].split("\n") 
indicies=splittedindicies[0] 

print indicies[0] 
files_list=list(files) 
files_l=files.split(" ") 
for x in files_l: 
    fileshandle=open(x,"r") 
    read=fileshandle.readlines() 

    for y in read: 
     words=y.split(" ") 
     words.sort() 
     for j in words: 
      print j ` 

私の出力は次のとおりです。

1 I am a good
person 2 Bla bla

もう一度、私はRのプログラマーで初めてPythonを扱っています。

+0

同じ単語が両方のファイルにあるであろうときに、出力として何をしたいですか?両方とも – GadaaDhaariGeek

+0

です。後で私は出力をきれいにし、重複を取り除かなければならないでしょう。しかし今のところは、クリーニングせずにすべての出力が必要です –

+0

私の謝罪。私は出力の一部をサンプリングしました。すべての単語が含まれている必要があります。私はそれらを追加します –

答えて

1

あなたがここにいくつかの正規表現のレシピを試してみてください

は、どのように私は

あなたの出力は、辞書の値である出力を格納することができ、あなたはそれらと操作を行うことができます。

import re 
track={} 
pattern=r'(\d):?(\w+\.txt)' 
with open('test.txt','r') as file_name: 
    for line in file_name: 
     match=re.finditer(pattern,line) 
     for finding in match: 

      with open(finding.group(2)) as file_name_2: 
       for item in file_name_2: 
        track[int(finding.group(1))]=item.split() 

for key,value in track.items(): 
    for item in value: 
     print(key,item) 

出力:

1 I 
1 am 
1 a 
1 good 
1 person 
2 Bla 
2 bla 
1

単語の順序は関係ありません。なぜなら、test.txtに表示されている順序でファイルを処理するのはなぜですか?コードにはいくつかのエラーがあります.1行目の内容は、splittedの内容を上書きします。私は特にsortへのあなたの呼び出しによって混乱しています。

とにかく、これを行う方法があります。あなたはコメントアウトしたよう

>>> with open('test.txt') as filenames: 
...  for line in filenames: 
...   file_no, filename = line.strip().split(':') 
...   with open(filename) as f: 
...    for line in f: 
...     for word in line.split(): 
...      print '{} {}'.format(word, file_no) 
... 
I 1 
am 1 
a 1 
good 1 
person 1 
Bla 2 
bla 2 
+0

どうすればリストに出力を保存できますか?または文字列ですか?ですから、後で重複などのために変更することができます –

+0

@ shadow.Tこれは最初に尋ねた質問とは異なる質問です。あなたがリストに慣れたらそれはとても簡単です。私はあなたに答えを出すつもりはありません。なぜなら、私は、答えられた質問に十分なコメントの中で、ボトムレスの追跡質問に引きずられているからです。 – timgeb

+1

@ shadow.T Stack(スタック)の他のユーザーのためにあなたの質問を回答したようにマークしてください – storaged

関連する問題