2016-07-22 15 views
0

私はすべてのファイルの列見出しを取得しようとしているtsvファイルのリストを持っています。複数のtsv/csvファイルのヘッダーを取得

with open(os.path.abspath('reference/file.tsv'), 'rU') as file: 
    reader = csv.reader(file) 
    row1 = next(reader) 

現在のところ、このスニペットでは、解析が必要なファイルのリストがある1つのファイルのみが読み込まれます。

ファイル名はfilesです。ファイルのリストをループして各ファイルの列ヘッダーのみを取得するにはどうすればよいですか?

答えて

1

私はこれを試してみて、それが動作します。

import os 
import csv 

dir_path = os.path.abspath('reference/') 
files = os.listdir(dir_path) 


for f in files: 
    with open(dir_path +'/'+f, 'rU') as file: 
     reader = csv.reader(file) 
     row1 = next(reader) 
     print row1 
+0

これはサブフォルダを考慮していないことに注意し、ファイルとして開こうとします。 –

+0

はい、ありがとうクリストフ。 –

+0

作品。今私はキーとしてファイルの名前と値として列ヘッダーで結果を保存します。辞書を作成するのが最善でしょうか?またはリスト? row1.append [f] = next(リーダー)がリストとして機能しません... – nlr25

1

コード内の変数はreferenceというフォルダの内容で、そのフォルダのすべてのファイルとサブフォルダを意味します。それらはファイルまたはサブフォルダ名のみを含む文字列のリストに返されます。つまり、パスの前に接頭辞を付ける必要があります。

例:リストにそれらを追加、

for file in Path('reference/').glob('*'): 
    if not file.is_file(): 
     continue 

    with open(str(file.resolve()), 'rU') as f: 
     reader = csv.reader(f) 
     row1 = next(reader) 

は、あなたがそれらのファイルのそれぞれの最初の行を読んでたほうが良いと思いません:pathlibモジュールを使用して

dir_path = os.path.abspath('reference/') 
files = os.listdir(dir_path) 

for file in files: 
    # Skip non-files 
    if not os.path.isfile(file): 
     continue 

    with open(os.path.join(dir_path, file), 'rU') as f: 
     reader = csv.reader(f) 
     row1 = next(reader) 

代替それをcsvreaderに渡しますか?

例:

lines = [] 

with open(str(file.resolve()), 'rU') as f: 
    lines.append(f.readline()) 

reader = csv.reader(lines) 
for row in reader: 
    # whatever you want to do with the parsed lines 
関連する問題