从多个tsv / csv文件中获取标头

时间:2016-07-22 23:21:30

标签: python csv

我有一个tsv文件列表,我希望获取所有文件的列标题。

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中列出了文件的名称。如何遍历文件列表并仅获取每个文件的列标题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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