我有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,这使得手动添加东西很难)?
谢谢!
答案 0 :(得分:0)
你有几个问题需要处理。 os.system
更改子shell调用的工作目录(然后立即退出),但不更改此运行脚本的目录。请使用os.chdir
。或者,更好的是,只需添加文件名的路径并使用它。
您无需读取整个文件即可获得第一行,.readline
或next()
函数可以为您执行此操作。最后,只需附加到列表中。
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
计算迭代次数而不关心其值,因此我们使用变量_
作为不需要该值的快速可视队列。