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}谢谢你的建议,我完全忘记了。我已根据你的建议编辑了答案。