.md
ファイルをファイル内で再帰的に取得しようとしています。これをコンパイルするために、main
モジュールで実行される再帰関数を定義します。`main`モジュールで実行中のNameError
コードは:
import os
def walk(dirname):
for name in os.listdir(dirname):
path = os.path.join(dirname, name)
if os.path.isfile(path):
if '.md' in path:
path_list.append(path)
else:
walk(path)
return path_list
def main():
dir = '/Users/Documents/Diary'
path_list = []
path = walk(dir)
if __name__ == '__main__':
main()
実行し、それが報告されます。
NameError: name 'path_list' is not defined
をしかし、main()
のなしで実行している、それが動作するかどうか:
In [80]: path_list = []
...: def walk(dirname):
...: for name in os.listdir(dirname):
...: path = os.path.join(dirname, name)
...: if os.path.isfile(path):
...: if '.md' in path:
...: path_list.append(path)
...: else:
...: walk(path)
...: return path_list
出力:
dir = '/Users/Documents/Diary'
walk(dir)
Out[81]:
['/Users/Documents/Diary/py4.1.If_statements.md',
'/Users/Documents/Diary/pyName_and_object:.md',
...]
私はバグを知りません。
walk()関数で宣言するにはどうすればいいですか?それは自己を呼び出すために再帰的に呼び出されます。ネストされたディレクトリに出会うと、 'def walk():path_list = []'。 path_listの値は、再帰的に呼び出されるたびにクリアされます。 –
真、その後グローバルな宣言は十分です – VonC