我该如何缩短他的密码? (多个文件路径)

时间:2019-09-05 21:36:43

标签: python

我制作了一个文件分类程序,将下载的文件放到正确的文件夹中。虽然这个块看起来很丑

wordpath = path + "Word"
musicpath = path + "Music"
imagepath = path + "Images"
zippath = path + "Zips"
exepath = path + "Programs"
otherpath = path + "Other"

我想将单词放在列表中,但是idk如何在for循环中设置正确的变量名。 谢谢。

4 个答案:

答案 0 :(得分:3)

您可以使用字典来动态建立值列表:

names = ['Word', 'Music', 'Images', 'Zips', 'Programs', 'Other']
namedPaths = dict([(name, path + name) for name in names])

print(namedPaths.get('Word'))

或者,按照@Barmar的建议,您可以通过使用字典理解来进一步缩短此时间:

names = ['Word', 'Music', 'Images', 'Zips', 'Programs', 'Other']
namedPaths = {name: path + name for name in names}

print(namedPaths.get('Word'))

答案 1 :(得分:1)

您可以将其保存在列表或字典中。另一点是您应该使用os.path.join()来连接路径。

import os

path = "somepath"

[os.path.join(path, dir) for dir in ["Word", "Music", "Images"]]

答案 2 :(得分:0)

我的第一个问题将是:“您真的需要所有这些变量吗?”

换句话说,将目的地视为“数据”而不是“代码”,并使用dictlist来存储结果会更有效吗?

我怀疑您的代码可能如下所示:

如果...是“ mp3”:        move_file_to(音乐路径)    elif ...一些“ exe”文件:        move_file_to(exepath)

我想知道是否会有更好的结果:

extension_to_path = { 'exe' : path + 'Programs',
    'mp3' : path + 'Music',
    ... etc ...
}

# ...
for file in files:
    ext = get_extension(file)
    if ext not in extension_to_path:
        print("File type not recognized:", file)
    else:
        move_file_to(extension_to_path(file))

我建议您考虑将所有代码发布在CodeReview网站上,以进行整个程序的审查。

这样一来,您的特定问题的具体答案可能看起来像这样:

path = '/path/to/'   # NOTE trailing slash
a,b,c,d = (path + word for word in "A B C D".split())
print(a,b,c,d)

/path/to/A /path/to/B /path/to/C /path/to/D

因此您可以分配:

wordpath, musicpath, imagepath, zippath, exepath, otherpath = (path + w for w in "Word Music Images Zips Programs Other".split())

但是请注意:这会将代码“缩短”到一行,但是由于wordpathWord的逐行关联已经消失了,因此它变得很难理解。现在,您必须计算空格等,并且它不支持目录名称中的空格。除了上面关于使用数据而不是代码的注释之外,我建议保留您现有的结构。

答案 3 :(得分:0)

如果您确实希望将它们作为单独的变量而不存储在dict中(如Steve的答案所示),则可以使用exec()。现在,我不会按照以下方式进行操作,但是如果您要这样做的话:

path = "/my/path/"
categories = ['Word', 'Music', 'Images', 'Zips', 'Programs', 'Other']
for category in categories:
    exec(category.lower() + 'path = ' + '"' + path + category + '"')

print(wordpath) # -> "/my/path/Word"
print(imagespath) # -> "/my/path/Images"