1

ここで私のコードでは、文字Dと 2 つの整数lifor ループで連結したいと考えています。

l = 1
for root, dirs, files in os.walk(r'D:\Python_Programs\B1'):
p = root.split('\\')
NoOfDir = len(dirs)                 #Here NoOfDir is 2 for my directory structure
    for i in range(0, NoOfDir):
        Dli = p[-1] + os.sep + dirs[i]
        print(Dli)

望ましい出力:

B1\New1    # As D10
B1\New2    # As D11

New1New2は、ルート ディレクトリの 2 つの子ディレクトリですB1。同様に、私は使用D10D11、さらに使用したいと考えています。

4

5 に答える 5

1

動的に生成された変数名を使用することはお勧めできません。直接__dict__アクセスを使用することは可能ですが、後のコードが使用された名前を知る良い方法はありません。代わりに、インデックス化 (または反復処理) できるリストまたは辞書を使用します。タプルDであるキーを使用して、辞書を使用するコードのバージョンを次に示します。(l, i)

l = 1 # I assume this gets incremented somewhere not shown
D = {}

for root, dirs, files in os.walk(r'D:\Python_Programs\B1'):
    p = os.path.split(root)
    for i, dir in enumerate(dirs):
        D[l, i] = os.path.join(p[-1], dir)
        print("D[{}, {}] = {}".format(l, i, D[l, i]))

ただし、辞書キーは外側のループの反復間で一意ではないため、これにはまだ論理的な問題があります。おそらく、それlがインクリメントされるはずの場所ですか?lもしそうなら、これはから取得する代替バージョンですenumerate:

import os.path

D = {}

for l, (root, dirs, files) in enumerate(os.walk(r'D:\Python_Programs\B1')):
    p = os.path.split(root)
    for i, dir in enumerate(dirs):
        D[l, i] = os.path.join(p[-1], dir)
        print("D[{}, {}] = {}".format(l, i, D[l, i]))
于 2013-01-27T22:25:00.030 に答える
0

簡単な方法:

l = 1
for root, dirs, files in os.walk(r'D:\Python_Programs\B1'):
p = root.split('\\')
NoOfDir = len(dirs)                 #Here NoOfDir is 2 for my directory structure
    for i in range(0, NoOfDir):
        varName = 'D%d%d' % (l, i)
        globals()[varName] = p[-1] + os.sep + dirs[i]
        print(globals()[varName])

私はそれが役立つことを願っています:)

于 2013-01-27T23:01:13.620 に答える
0

新しい変数を作成する代わりに、辞書を使用しDliてキーにすることができます。

Dli = 'D'+str(l)+str(i)
new_dic[Dli] = p[-1] + os.sep + dirs[i]
于 2013-01-27T22:20:10.740 に答える
0

vars を使用して変数を保存し、さらに使用することができます。

vars()['new_global_var'] = 'bla'

print new_global_var

于 2013-01-27T22:22:32.477 に答える
0

私はコードがどのように見えるかから推測しているだけですが、代わりに

 Dli = p[-1] + os.sep + dirs[i]

使うべきではないか

os.path.join(p[-1], dirs[i])

os.sepファイルパスを使用する場合、通常は気にする必要はありません。

os.path を確認する必要があると思います。string.splitおそらく whenも実行しているので、os.path.split本当に必要なものです。

os.pathすでに解決済みの問題を解決しようとしていると思います。

于 2013-01-27T22:34:35.447 に答える