python を始めて2カ月の初心者です。
ディレクトリとファイルとそれらの格納先を出力するプログラムを作成しています。
その中でfor文をいくつか使っているところがあり、そのfor文の処理後の状態がどのようになっているかを確認したいです。作成したコードは、下記になります。
import pandas as pd import openpyxl as xl import os def make_pathlist(path): pathlist = [] for curDir, dirs, files in os.walk(path): #指定したディレクトリからトップダウンの流れでディレクトリを走査 dum = curDir.count('\') - org.count('\') #ここでは何を変数に代入しているのか?? for a_dir in dirs: #各ディレクトリの一覧を取得 pathlist.append([curDir] + [''] * dum + [a_dir]) #ここでは何をしているのか?? for a_file in files: #各ファイルの一覧を取得 pathlist.append([curDir] + [''] * dum + [a_file]) #ここでは何をしているのか?? mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか?? return [s + [''] * (mx - len(s)) for s in pathlist] #何の戻り値を返しているのか? def conv_to_depthfirst(pathlist): for i in range(len(pathlist)): for j in range(1, len(pathlist[i])): dir = os.path.join(pathlist[i][0], pathlist[i][j]) if pathlist[i][j] and os.path.isdir(dir): zs = ze = 0 for k in range(i+1, len(pathlist)): if pathlist[k][0].find(dir) >= 0: if zs == 0: zs = ze = k else: ze = k else: if zs > 0: break if zs > i + 1: # zs ~ ze を i と i + 1 の間に挿入する return conv_to_depthfirst(pathlist[0:i+1] + pathlist[zs:ze+1] + pathlist[i+1:zs] + pathlist[ze+1:]) return pathlist
要するに、for文での処理が作業段階ごとにprintなどで出力して、ここでは何の作業をしているのだなと把握したいのですが、そのようなことってできるのでしょうか。
コードのインデントが潰れてしまってるので、コードが読めません
> for文での処理が作業段階ごとにprintなどで出力して、ここでは何の作業をしているのだなと把握したいのですが、そのようなことってできるのでしょうか
実際にやってみて何か問題が発生したのでしょうか?
問題は発生していないのですが、掲載した部分だけ他者が作成したコードでして、どのようにプログラムが作られているのか把握したいためです。戻り値(return)の部分をprintで出力できるかと試みてみましたができませんでした。
実際にやってみて=コードの動作のことではなく、「printなどで出力して」を実際にやってみて、という意味です。「何をしているのか??」というコメントがたくさんありますが、戻り値(return)の部分以外はprintできたのでしょうか?printしようとしてみたコードを提示いたたき、そこでどういう問題(エラーが出たとか、目的とは違うものがprintされたとか)を示していただくと回答しやすいです。
GUIは使えるんですか?それともCUIでプログラム作ってますか?
toast-uzさん
戻り値(return)の部分もそれ以外もprint出力できていません。どこにそのような設定をすればよいかも正直分らない状態なので、可能であれば教えていただきたいです。
hentaiman
どっちなのかわかりませんが、プログラムはanacondaのspiderで作成しました。
例えば、
dum = curDir.count('\\') - org.count('\\') #ここでは何を変数に代入しているのか??
の直下に print(dum)
mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか??
の直下にprint(mx)
などを書いてみるといったことも、わからなくてできないのでしょうか?
あるいはそういうことはやってみたが、期待と異なる結果がでたるのでしょうか?
toast-uzさん
すみません、分からないです。ちなみに
dum = curDir.count('\\') - org.count('\\') #ここでは何を変数に代入しているのか??
の直下に print(dum)
mx = max(len(s) for s in pathlist) #ここでは何を変数に代入しているのか??
を入力して、1行ずつプログラムを実行していくと下記エラーメッセージがでてきました。
NameError: name 'dum' is not defined
これは、printする際、変数に型(intなど)をつけないといけないのでしょうか。
printで変数名を表示させることが、わかっていない状況なのですね。だとすると今書かれている回答は理解できない状態でしょうか?
なぜエラーが出ているのかはわかりません。実行の手順に問題があるか、うまくprint文が書けていないか、いろいろ可能性があると思います。
ただし、回答が理解できているなら、この話はあまり追いかけなくて、忘れていただいてもよいと思います。