こんにちは、いくつかのディレクトリをトラバースし、それらのディレクトリ内のいくつかのファイル内の情報を抽出するために使用する必要があるこの python スクリプトがあります。
だから私は多くのディレクトリを持っています。これらの各ディレクトリ内には、さらに 5 つのサブディレクトリがあります。これら 5 つのサブディレクトリのそれぞれに、3 つのテキスト ファイルがあります。1 つは無視する .txt で、もう 1 つは .out で、「Fin」という単語が 1 行に含まれているかどうかを確認するために読む必要があります。その行がある場合、拡張子が .time の残りのファイルを読み取る必要があります。このファイルには、Unix の time コマンドの出力が次のように含まれています。
real 0m1.185s
user 0m0.027s
sys 0m0.026s
このファイルから、そのファイルの 2 行目 (実数 0m1.185s) であるリアルタイム行を抽出する必要があります。最初の行は '\n' です。
したがって、現在のディレクトリの 5 つのサブディレクトリ (つまり、合計 5 つのファイル) にあるファイルごとにこの行を抽出し、各ファイルの各行が示す合計秒数を合計してから、5 で割る必要があります。 5 つのサブディレクトリの値の平均を取得します。
これらの平均合計のそれぞれについて、値を含む出力ファイルを作成します。したがって、2つのディレクトリがある場合
1/
2/
これらのディレクトリにはそれぞれ 5 つのサブディレクトリがあります
1/1 1/2 1/3 1/4 1/5
2/2 2/2 2/3 2/4 2/5
これらのサブディレクトリ内に、テキスト ファイルがあります。つまり、1/1 には、"Fin" という単語が含まれていると思われる something.out ファイルがあります。もしそうなら、1/1にsomething.timeファイルがあり、そこからリアルタイムラインを抽出します。次に、.time ファイルの値を 1/1 1/2 1/3 1/4 1/5 で合計し、5 で割って平均を求めます。次に、この平均を出力ファイルに書き込みます。
私が抱えている問題は、コマンド linecache.getline を使用して something.time ファイルから2行目を抽出することですが、各サブディレクトリで同じ行を奇妙に抽出するため、正しく機能しません。したがって、サブディレクトリ 1/1 では、something.time ファイルの 2 行目は "real 0m1.809s" です。私のコードはこれを正常に実行しますが、1/2 サブディレクトリに移動し、そこで something.time ファイルの 2 行目を抽出します。不思議なことに、それは同じ「実際の 0m1.809s」行ですが、何かに引っかかると表示されます。 1/2 の time ファイルを見ると、「本当の 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