2016-11-02 23 views
0

ディレクトリ内のすべてのファイルを読み込んでリストに保存し、それらのファイルを1つずつ読み込む必要があります。 私は 'globモジュール'のような外部モジュールを使いたくありません。だから、2つの異なるアプローチを通じてしよう:Pythonはファイル名を読み込んでリストに保存します

最初のアプローチ:

import os 
file_list = os.listdir("jsons") 

for files in file_list: 
    data = open(files,"r") 

出力:

['A03DUrQz1BM9SQ2.json', 'A04D5V1u1BMxaV6.json', 'A0kxiHL81AN9pH5.json', 'A1Fxs5Ag1A8vuB5.json', 'A2Dsv7RE1BDqYt5.json', 'A2HkZPkn1BpvvG5.json'] 

が、ここでの問題は、ファイル名が文字列の形式で保存し、これを開くことができていないということです引用符で ''読んでファイルを作成します。

第二のアプローチ:

file_list = os.system("ls jsons/") 
**print file_list.split()** 
for files in file_list: 
    data = open(files,"r") 
    print data 

出力:ここ

Traceback (most recent call last): 
    File "asn-1_q3.py", line 9, in <module> 
    print file_list.split() 
AttributeError: 'int' object has no attribute 'split' 

が、それはintとして保存し、ファイルを分割することはできていません。 どうすれば解決できますか?

答えて

0

あなたは、元のディレクトリ名を使用してファイルオブジェクトとos.path.joinファイル名をreadする必要があります(またはそれは、現在のディレクトリ内のファイルを検索します):

import os 
import os.path 
file_list = os.listdir("jsons") 

for file_name in file_list: 
    with open(os.path.join("jsons", file_name), "r") as src_file: 
     data = src_file.read() 
     print(data) 

ここで制限するために、発電機を使用する例ですメモリ内のデータ量(すべてのデータを配列にロードする):

import os 
os.path 

def all_file_content(directory_name): 
    file_list = os.listdir(directory_name) 
    for file_name in file_list: 
     with open(os.path.join(directory_name, file_name), "r") as src_file: 
      yield src_file.read() 

for file_content in all_file_content("jsons"): 
    print(file_content) 
+0

ありがとうございます。それはうまくいった。また、別の発電機の例を共有してくれてありがとう。私は可能な限りコードにジェネレータを使用することを学んでいます –

関連する問題