我制作了一个文件分类程序,将下载的文件放到正确的文件夹中。虽然这个块看起来很丑
wordpath = path + "Word"
musicpath = path + "Music"
imagepath = path + "Images"
zippath = path + "Zips"
exepath = path + "Programs"
otherpath = path + "Other"
我想将单词放在列表中,但是idk如何在for循环中设置正确的变量名。 谢谢。
答案 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)
我的第一个问题将是:“您真的需要所有这些变量吗?”
换句话说,将目的地视为“数据”而不是“代码”,并使用dict
或list
来存储结果会更有效吗?
我怀疑您的代码可能如下所示:
如果...是“ 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())
但是请注意:这会将代码“缩短”到一行,但是由于wordpath
与Word
的逐行关联已经消失了,因此它变得很难理解。现在,您必须计算空格等,并且它不支持目录名称中的空格。除了上面关于使用数据而不是代码的注释之外,我建议保留您现有的结构。
答案 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"