很简单,我在特定位置的所有子文件夹中循环,并从三个不同的文件中收集一些数字。
def GrepData():
import glob as glob
import os as os
os.chdir('RUNS')
RUNSDir = os.getcwd()
Directories = glob.glob('*.*')
ObjVal = []
ParVal = []
AADVal = []
for dir in Directories:
os.chdir(dir)
(X,Y) = dir.split(sep='+')
AADPath = glob.glob('Aad.out')
ObjPath = glob.glob('fobj.out')
ParPath = glob.glob('Par.out')
try:
with open(os.path.join(os.getcwd(),ObjPath[0])) as ObjFile:
for line in ObjFile:
ObjVal.append(list([X,Y,line.split()[0]]))
ObjFile.close()
except(IndexError):
ObjFile.close()
try:
with open(os.path.join(os.getcwd(),ParPath[0])) as ParFile:
for line in ParFile:
ParVal.append(list([X,Y,line.split()[0]]))
ParFile.close()
except(IndexError):
ParFile.close()
try:
with open(os.path.join(os.getcwd(),AADPath[0])) as AADFile:
for line in AADFile:
AADVal.append(list([X,Y,line.split()[0]]))
AADFile.close()
except(IndexError):
AADFile.close()
os.chdir(RUNSDir)
每个文件打开命令都放在 try - except 块中,因为在少数情况下打开的文件将为空,因此附加 line.split() 将导致索引错误,因为列表为空。
但是,在运行此脚本时,我收到以下错误:“OSError: [Errno 24] Too Many open files”
我的印象是“with open ...”语句的想法是它负责在使用后关闭文件?显然,这并没有发生。
所以我要求的是两件事:
- 答案是:“我对 with open 的理解是否正确?”
- 如何纠正导致此问题的任何错误?
(是的,我知道代码并不完全优雅。整个尝试 - 除了应该是一个可重复使用的对象 - 但我会在找出这个错误后修复它)