Python:将来自不同目录的文件输出附加到一个整体列表中

时间:2018-04-19 01:56:00

标签: python list io append

我有n个目录(标记为0到n),每个目录都有一个文件(所有文件都有相同的名称),我想从中获取每个文件中的某些行。然后我想在列表中按顺序(从0到n)将这些抓取的行追加到一起。

这是我的设置:

for i in range(0, nfolders):
    folder = "%02d" % i
    os.system("cd " + folder)

    myFile = open("myOutputFile", "r")
    lines = myFile.readlines()
    firstLine = float(lines[0])

    #I then write a loop to store the next 5 lines in a list using append and call this list nextLines

我的问题是,是否有一种简单的方法可以将所有目录中的firstLine附加到一个列表中(我的函数返回),以及将所有目录中的nextLines附加到一个列表中(同样,我的函数返回)?

我知道有扩展功能,我会在这里循环(因为假设我有nfolders = 300,这使得手动添加东西很难)?

谢谢!

1 个答案:

答案 0 :(得分:0)

你有几个问题需要处理。 os.system更改子shell调用的工作目录(然后立即退出),但不更改此运行脚本的目录。请使用os.chdir。或者,更好的是,只需添加文件名的路径并使用它。

您无需读取整个文件即可获得第一行,.readlinenext()函数可以为您执行此操作。最后,只需附加到列表中。

my_list = []

for i in range(0, nfolders):
    filename = "%02d/MyOutputFile" % i
    with open(filename) as myFile:
        firstLine = float(next(myFile))
        my_list.append(firstLine)

更新

假设您希望每个文件都有4 + i行。你可以用

来加强这个
my_list = []

for i in range(0, nfolders):
    filename = "%02d/MyOutputFile" % i
    with open(filename) as myFile:
        my_list += (next(myFile) for _ in range(4+i))

请注意,我们只使用range计算迭代次数而不关心其值,因此我们使用变量_作为不需要该值的快速可视队列。