2017-06-18 10 views
0

同じディレクトリにある50個のファイルの関数内で次のコードを使いたいと思います。50個のファイルの内容をPythonの同じリストに結合する方法

with open(files) as f: 
    my_list = [int(i) for line in f for i in line.split()] 

私は

with open(file1) as a, open(file2) as b, ... open(file50) as c: 
    list1 = [int(i) for line in a for i in line.split()] 
    list2 = [int(i) for line in b for i in line.split()] 
    ... 
    list50 = [int(i) for line in c for i in line.split()] 
    my_list = list1 + list2 + ... list50 

を試してみましたが、これと同じ配列に50個のファイルの内容を組み合わせます。しかし、それはあまりにも長く複雑であり、それはまた動作しません。私はこれを行うもっと簡単な方法があることを知っている、私はちょうどそれを行う方法を知らない。どんな助けでも大歓迎です。

+0

ファイルは何ですか? CSV、タブ、txt、XML?形式に応じて様々な解決策があるため、 – Parfait

+0

@Parfaitそれらはtxtファイルです – Sekou

答えて

1

は、たぶん私は完全にポイントを逃していますが、あなたはしないでくださいすべてのファイルを同時に開く必要があるので、ループの何が問題なのか、ファイルを1つずつ開くのでしょうか?

my_list = [] 

for filename in [file1,file2,file3]: 
    with open(filename) as f: 
     my_list += [int(i) for line in f for i in line.split()] 
+0

これは正しい答えを出力しないだけです。私はちょうど4つのファイルでテストしました。これはなぜですか? – Sekou

+0

質問を編集して正解を定義し、例を追加してください。あなたは知っている読者ではありません。 –

1

あなたはこのためにfileinput.inputを使用することができます。

import fileinput 


items = [] 
for line in fileinput.input(files): 
    items.extend(int(x) for x in line.split()) 

In Python 3.2+それは、コンテキストマネージャをも使用することができます。

​​
+0

'items.extend(line.split()内のxのint(x))'を 'items.extend(map(int、line.split() )) ' –

+0

@Ashwiniどのようにして50個のファイルを作成するのですか? – Sekou

+0

@Sekouあなたは既にファイルリストを持っていると仮定して、そのリストを 'fileinput.input'に渡すだけです(ディレクトリ内のすべてのファイルのリストを取得するには' os.listdir() 'を使います)(https: //stackoverflow.com/q/3207219/846892))。 –

関連する問題