0

これは私のコードです。「example.py」と呼びましょう

import traceback
import sys
import os
import linecache


try:
    data_files = [x[2] for x in os.walk(os.path.dirname(sys.argv[0]))]
    fileNameList = data_files[0]    # gets the list of files in the directory where example.py is present
    execfile("sample.py")

except:

このプログラムは IDLE で実行すると完全に動作しますが、コマンド ラインで実行すると次のエラーが表示されます。

Traceback (most recent call last):
  File "example.py", line 15, in <module>
    fileNameList = data_files[0]
IndexError: list index out of range

コマンドラインからフォルダー内のファイルのリストを取得できないとしか思えません。私はPythonプログラミングが初めてなので、誰かがこれまたは少なくとも私が間違っている点を解決できれば本当に感謝しています

4

2 に答える 2

2

問題はこれだと思います.IDLEから実行するsys.argv[0]と、スクリプトへのパス全体が保持されるため、ディレクトリ名がos.path.dirname()正しく抽出されます。しかし、コマンド ラインから実行すると、 はパスではなくsys.argv[0]などのスクリプト名のみを保持するため、空の文字列が返されます。example.pyos.path.dirname()walk

編集

sys.argv[0]修正方法:単独で使用する代わりに、使用os.path.abspath(sys.argv[0])してスクリプトの完全なパスを取得します。次に、それos.path.dirname()に適用するディレクトリ名が得られ、IDLE とコマンドラインの両方で動作します。

于 2012-12-12T21:16:29.357 に答える
2

やったほうがいい:

data_files = [x[2] for x in os.walk(os.getcwd())]

問題は、コマンド ラインから実行すると、ファイルへの完全な絶対パス (IDLE が使用するパス) ではなくsys.argv[0]、ファイルの呼び出しに使用した名前 ( ) になることです。したがって、そこから何も得られません。example.pyos.path.dirname

次のように、別のディレクトリからファイルを実行する場合は注意してください。

python ../my_examples/example.py

このスクリプトは、現在のディレクトリではなく、現在のディレクトリを反復処理します。ディレクトリ使用したい場合は、次のようにします。example.pyexample.py

data_files = [x[2] for x in os.walk(os.path.abspath(__file__))]
于 2012-12-12T21:07:38.460 に答える