Python 我怎样才能缩短他的代码?(多个文件路径)

Python 我怎样才能缩短他的代码?(多个文件路径),python,Python,我制作了一个文件分类程序,将我下载的文件放入正确的文件夹。不过这座街区看起来很难看 wordpath = path + "Word" musicpath = path + "Music" imagepath = path + "Images" zippath = path + "Zips" exepath = path + "Programs" otherpath = path + "Other" 我想把这些单词放在一个列表中,但我不知道如何在for循环中设置正确的变量名。 谢谢。您可以将其保

我制作了一个文件分类程序,将我下载的文件放入正确的文件夹。不过这座街区看起来很难看

wordpath = path + "Word"
musicpath = path + "Music"
imagepath = path + "Images"
zippath = path + "Zips"
exepath = path + "Programs"
otherpath = path + "Other"
我想把这些单词放在一个列表中,但我不知道如何在for循环中设置正确的变量名。
谢谢。

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

import os

path = "somepath"

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


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

名称=[“单词”、“音乐”、“图像”、“拉链”、“程序”、“其他”] namedPaths=dict[名称,路径+名称中名称的名称] 打印名称路径。获取“Word” 或者,正如您所建议的,您可以通过使用字典理解进一步缩短此时间:

名称=[“单词”、“音乐”、“图像”、“拉链”、“程序”、“其他”] namedPaths={name:path+name中name的name} 打印名称路径。获取“Word”
我的第一个问题是:你真的需要所有这些变量吗

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

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

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
如果。。。一些“mp3”的东西: 将文件移动到USICPATH 埃利夫。。。某个“exe”文件: 将\u文件\u移动到xepath

我想知道一个更好的结果是否不是这样:

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))
我建议你考虑把你所有的代码放到网站上进行整个程序审查。

这样,您的特定问题的具体答案可能如下所示:

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())

但请注意:这将代码缩短为一行,但由于wordpath与Word的逐行关联已经消失,因此更难理解。现在您必须计算空格等,而且它不支持目录名中的空格。我建议保留您现有的结构,除了我上面关于使用数据而不是代码的评论。

如果您真的希望它们作为单独的变量,而不是像Steve的回答那样存储在dict中,建议您可以使用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"

如果最后不需要单个变量,可以将所有后缀字符串粘贴到列表中,然后执行[path+suff for suff in suffix]。那会给你一张单子。你也可以使用字典。你想得到什么?如果不改变它的功能,就无法缩短它。你应该提供更多的上下文,并说明为什么要缩短它。你可以使用字典理解而不是在列表理解中调用dict。{name:path+name for name in names}谢谢你的建议,我完全忘记了。我已根据你的建议编辑了答案。