你好,我有一个python脚本,我需要使用它遍历一些目录,并在这些目录中的一些文件中提取一些信息。在
所以我有很多目录。在每个目录中都有5个子目录。在这5个子目录中,我有3个文本文件。一个是我忽略的.txt,另一个是.out,我需要读一下,看看它是否有一行带有单词“Fin”。如果它有那一行,那么我必须读取剩下的文件,它的扩展名是.time。此文件包含Unix中time命令的输出,如下所示:
real 0m1.185s
user 0m0.027s
sys 0m0.026s
我需要从这个文件中提取实时行,这是该文件的第二行(real 0m1.185s),第一行是'\n'。在
因此,我为当前目录的5个子目录中的每一个文件提取这一行(也就是说总共有5个文件),我必须把每一行显示的总秒数加起来,然后除以5,得到5个子目录上的值的平均值。在
现在,对于这些平均总数,我编写一个输出文件,其中包含值。如果我有两个目录
^{pr2}$每个目录都有5个子目录
1/1 1/2 1/3 1/4 1/5
2/2 2/2 2/3 2/4 2/5
在这些子目录中我有文本文件,这意味着在1/1上有一个什么东西。出去希望里面有“Fin”这个词。如果是的话什么事。时间在1/1文件中提取实时线。然后,我将.time文件的值加总为1/11/2 1/3 1/4 1/5,然后除以5得到平均值。然后我将这个平均值写入一个输出文件。在
我遇到的问题是我使用命令linecache.getline从中提取第二行什么事。时间文件,但这不能正常工作,因为它奇怪地提取了每个子目录上的同一行。所以在子目录1/1上什么事。时间文件为“real 0m1.809s”。我的代码做得很好,但是它会进入1/2子目录并提取什么事。时间奇怪的是,它显示的是相同的“real 0m1.809s”行,但是如果我搜索什么事。时间在1/2的文件中显示它是“real 0m1.009s”。在
现在在2/目录中也会发生同样的情况。它在文件进入的第一个子分区中提取文件的第一行,但是它只重复该行5次。在
这是我的代码,有人能指出我的错误在哪里吗?在
def proArch(dirArch):
dirList = os.listdir(dirArch)
resultado = 0
valores=[]
for f in dirList:
if("out" in f):
for linea in open(f):
if "Fin" in linea:
for f_v in dirList:
if("time" in f_v):
linea=linecache.getline(f_v, 2)
valores=re.split("['\tms']",linea)[1:3]
resultado=(float(valores[0])*60)+float(valores[1])
else:
print("El archivo "+dirArch+" no se proceso bien.")
return resultado
dirList_g = os.listdir(".")
dirOrig = os.getcwd()
res_tot=0.0
for d in dirList_g:
if os.path.isdir(d) == True:
os.chdir(dirOrig+"/"+d)
dirAct = os.getcwd()
dirList_w = os.listdir(".")
for d_w in dirList_w:
os.chdir(dirAct+"/"+d_w)
dirArch = os.getcwd()
res_tot=res_tot+proArch(dirArch)
res_tot=res_tot/5
os.chdir(dirOrig)
with open("output.txt", "w") as text_file:
text_file.write(dirAct+" "+str(res_tot)+"\n")
res_tot=0.0
很可能是
linecache
搞乱了你,实际上caching
是上次一个类似命名文件中的一行。在另外,看起来您没有使用完整的文件路径,因此您可能打开了一个与预期不同的文件。在
例如,如果不使用
f_v
,您需要执行以下操作:尝试将
^{pr2}$linecache.getline
替换为以下内容:与linecache不同,它实际上每次都会打开并读取文件。在
最后,如果您使用
os.walk
重写此代码,那么它可能会更清晰、更容易处理:https://docs.python.org/2/library/os.html
例如:
相关问题 更多 >
编程相关推荐