2016-07-22 80 views
0

我有一個tsv文件的列表,我希望爲所有文件抓取列標題。從多個tsv/csv文件抓取頭文件

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

目前,這段代碼只能讀取1個文件,我有一個需要解析的文件列表。

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

這些文件的名稱列在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

是的,謝謝Kristof。 –

+0

作品。現在我想將結果保存爲文件名作爲鍵和列標題作爲值。最好是創建一本字典嗎?或列表? row1.append [f] = next(reader)作爲列表不起作用... – nlr25

1

代碼中的files變量是reference文件夾的內容,即文件夾的所有文件和子文件夾。它們以字符串列表返回,僅包含文件或子文件夾名稱。這意味着你必須自己給路徑加上前綴。

例子:

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) 

使用pathlib模塊的替代:

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) 

你會不會在讀取每個這些文件的第一行更好,追加到列表然後將它們傳遞給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