1

在我的代码中,我想在 for 循环中连接一个字符和D两个整数。li

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是根目录的两个子目录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

您可以使用字典而不是创建新变量,并且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

简单的方法:

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 = p[-1] + os.sep + dirs[i]

你不应该使用

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

os.sep在通常情况下使用文件路径时,您不必担心。

我认为您需要查看 os.path ,因为您string.split可能os.path.split确实需要这样做。

我认为您正在尝试解决os.path已经解决的问题。

于 2013-01-27T22:34:35.447 回答