Python 如何返回多个文件的第一行?

Python 如何返回多个文件的第一行?,python,Python,我有一个csv,它在文件的第一行包含样本的名称,我想返回到一个列表,以便重命名后面的实验数据。文件的前两行基本上如下所示: Solvent, , Sample, , Wavelength, Absorbance, Wavelength, Absorbance x data, y data, x data, y data 我想把这两个吸光度柱重命名为溶剂和样品 我写这篇文章是为了得到文件中第一行的列表: def AbsColNames(pathname): for file in gl

我有一个csv,它在文件的第一行包含样本的名称,我想返回到一个列表,以便重命名后面的实验数据。文件的前两行基本上如下所示:

Solvent, , Sample, ,
Wavelength, Absorbance, Wavelength, Absorbance
x data, y data, x data, y data
我想把这两个吸光度柱重命名为溶剂和样品

我写这篇文章是为了得到文件中第一行的列表:

def AbsColNames(pathname):
     for file in glob.glob(raw_UV + "*/*.csv"):
         with open(file) as f:
             names = f.readline()
             return names

但是,它不会在文件列表中循环,而是只给出第一个文件的第一行。我哪里做错了?

这对你应该有用

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir('folderPath') if isfile(join('folderPath', f))]

for file in onlyfiles:
    with open(join('folderPath', file), 'r') as f:
        first_line = f.readline()
        print first_line

在每次迭代中,您都会覆盖名称值

您可能需要以下内容:

def AbsColNames(pathname):
     names_list = []
     for file in glob.glob(raw_UV + "*/*.csv"):
         with open(file) as f:
             names_list.append(f.readline())
     return names_list

以下是在内存中构建列表的替代方法:

def AbsColNames(pathname):
     for file in glob.glob(raw_UV + "*/*.csv"):
         with open(file) as f:
             yield f.readline()

这将使用生成器生成每个文件的每个初始行。调用者可以像列表一样在for循环中使用此生成器,但没有列表的内存开销。

请阅读有关调试代码的提示。但是,它不会在文件列表中循环,而只提供第一个文件的第一行。您在此处发布的代码将给出最后一个文件的第一行。您确定发布的代码与实际运行的代码相同吗。如果没有,请在这里回答您的问题。请特别注意这里的缩进与代码中的缩进相匹配。你是对的,我一直在使用缩进,并注意到了这一点。编辑后的代码只读取第一个文件。@adamzr将无条件返回放在循环中没有意义-它将在第一次迭代时返回,这将是结束。您需要做的是在循环内附加到列表,然后在循环外返回列表。在循环之前初始化空列表。@alaniwi谢谢,这很有意义。