似たような名前の .py ファイルをいくつか実行したいと考えています。目標は、a1.py、a2.py、および a3.py の呼び出しです。以下のものを試しましたが、動作しません。「n」の各要素をファイル名に挿入して複数のスクリプトを実行するにはどうすればよいですか? 助けてくれてありがとう。
n = [1,2,3]
for x in n:
execfile('C:/a$n.py')
個人的には、連結よりも文字列の書式設定を使用する方が好きです (さまざまなデータ型に対してより堅牢です)。また、そのようなリストを保持する理由はなく、次のように置き換えることができますrange
for x in range(1,4):
execfile('C:/a%s.py' % x)
range(1, 4) == [1, 2, 3] # True
つまり、format
Marcin が使用するコマンドは、技術的にはより Pythonic です。ただし、個人的には冗長すぎると思います。
文字列の連結が最もパフォーマンスの高いオプションだと思いますが、ここではパフォーマンスが決定要因になるべきではありません。
要点をまとめると:
Pythonic ソリューション:
execfile('C:/a{}.py'.format(x))
Cタイプのソリューション(私が個人的に好む):
execfile('C:/a%s.py' % x)
パフォーマンスの高いソリューション (繰り返しになりますが、ここではパフォーマンスが原動力であってはなりません)
execfile('C:/a' + str(x) + '.py')
編集:私が間違っていたことが判明し、Cタイプのソリューションが最もパフォーマンスが優れています。timeit
以下の結果:
$ python -m timeit '["C:/a{}.py".format(x) for x in range(1,4)]'
100000 loops, best of 3: 4.58 usec per loop
$ python -m timeit '["C:/a%s.py" % x for x in range(1,4)]'
100000 loops, best of 3: 2.92 usec per loop
$ python -m timeit '["C:/a" + str(x) + ".py" for x in range(1,4)]'
100000 loops, best of 3: 3.32 usec per loop
あなたはこれを行うことができます:
n = [1,2,3]
for x in n:
execfile('C:/a{}.py'.format(x))
print('C:/a{}.py'.format(x))
名前は次のとおりです。
C:/a1.py
C:/a2.py
C:/a3.py