45206


Jupyterで複数のtxtファイルを一度に読み込むにはどうすればいいのでしょうか.  
例えば，fileというディレクトリに格納された、`data1.txt〜data100.txt` というファイルを読み込んで、それぞれを変数
`data1〜data100`としたい時、

[code]

    f1=open('file/data1.txt', 'r','utf-8')
    data1=f1.read()
    f1.close()
    
[/code]

という動作を繰り返させたいのですが、皆様でしたらどうされるでしょうか。  
初歩的な質問で大変恐縮ですが、ご教授いただけましたら幸いです。


CC BY-SA 4.0
2018-07-01T05:31:08.580
45204
2018-07-02T16:09:27.963
2018-07-02T16:09:27.963
2521
27030
question
python jupyter-notebook
pythonで複数のtxtファイルを一度に読み込みたい


ファイル名を `data1.txt` から `data100.txt`
まで繰り返すには、[`str.format()`](https://docs.python.jp/3/library/stdtypes.html#str.format)
関数が使えます。たとえば変数 `i` が `1` から `100` まで繰り返すとき、`'data{}.txt'.format(i)` と書くと
`data1.txt` から `data100.txt` までを繰り返せます。

また、読み込んだ 100 個のファイルデータをそれぞれ格納するには、長さが 100 のリストを作る方が良いでしょう。`data1` から `data100`
までの 100 個の変数を作るのではなく、`data` という変数を作り `data[0]` から `data[99]`
までで参照できるようにしよう、ということです。

これらを踏まえ、たとえば下のように書けます。

[code]

    data = [None] * 100
    for i in range(100):
        f = open('file/data{}.txt'.format(i + 1), mode='r', encoding='utf-8')
        data[i] = f.read()
        f.close()
    
[/code]

もっと言うと、これだと `read()` している間にエラーが起こると `close()` されないかもしれないため、次のように `with`
を使って書き直した方が良いです。このことは Python 3
の[チュートリアルに書かれています](https://docs.python.jp/3/tutorial/inputoutput.html#reading-
and-writing-files)。

[code]

    data = [None] * 100
    for i in range(100):
        with open('file/data{}.txt'.format(i + 1), mode='r', encoding='utf-8') as f:
            data[i] = f.read()
    
[/code]


CC BY-SA 4.0
2018-07-01T05:59:14.843
45206
2018-07-01T05:59:14.843
19110
45204
answer


連続してデータを作成するような処理を書くならイテレータ・ジェネレータは覚えておいたほうがお得です。

[code]

    from pathlib import Path
    
    def readfiles():
        for i in range(1, 101):
            yield Path('file/data{}.txt'.format(i)).read_text()
    
    data = list(readfiles())
    
[/code]

読み込み処理は中でやってるのは `open()` して `read()` してるのと同じです。  
読み込んだデータを直接変更しないなら `list()` ではなく `tuple()` で。


CC BY-SA 4.0
2018-07-01T07:27:31.643
45209
2018-07-01T07:27:31.643
13227
45204
answer