有人向我提出挑战,要我创建一个程序,根据拍摄的月份将他们的照片排序到文件夹中,我想一行一行地完成(我知道,这样效率低而且不可读,但我还是想这样做,因为一行行很酷)
我需要一个for循环来完成这个任务,但是我知道在一行中使用for循环的唯一方法是列表理解,所以我就是这么做的,但是它创建了一个空列表,并且不打印列表中的任何内容。你知道吗
我要做的是将文件重命名为month created+原始文件名(例如:bacon.jpg --> May\bacon.jpg
)
下面是我的代码(Python 3.7.3):
import time
import os.path
[os.rename(str(os.fspath(f)), str(time.ctime(os.path.getctime(str(os.fspath(f))))).split()[1] + '\\' + str(os.fspath(f))) for f in os.listdir() if f.endswith('.jpg')]
更具可读性的非列表理解版本:
import time
import os.path
for f in os.listdir():
fn = str(os.fspath(f))
dateCreated = str(time.ctime(os.path.getctime(fn)))
monthCreated = dateCreated.split()[1]
os.rename(fn, monthCreated + '\\' + fn)
列表理解是一种不好的方法吗?另外,如果我打印列表,它是[]
而不是[None, None, None, None, None, (continuing "None"s for every image moved)]
,有什么原因吗?你知道吗
请注意:我理解这是低效和不好的做法。如果我做这件事的目的不仅仅是为了好玩,看看我是否能做到,我显然不会试图在一行。你知道吗
这在两个方面是不好的:
您的目的似乎是重命名一系列文件,而不是构建一个列表。我相信,您需要的Python工具是
map
函数。编写一个函数来更改一个文件名,然后在文件名列表或新旧文件名的元组上使用map
来运行所需更改的序列。你知道吗列表理解是一种不好的方法吗?你知道吗
是的。但如果你想在一行中完成它,它要么就是那个,要么就是用“;”。例如:
顺便说一下,仅仅重命名包含斜杠的文件不会创建文件夹。你必须使用
os.mkdir('foldername')
。你知道吗最后,如果您真的想这样做,我建议您在多行中正常执行,然后在一行中用分号分隔。你知道吗
相关问题 更多 >
编程相关推荐