我想把下面的书移到指定的DirHTML目录中。
books = ['HTML-Head First HTML and CSS - 2nd Ed.pdf',
'HTML and CSS - Design and Build Websites - Jon Duckett - November 2011.pdf',
"Murach's HTML5 and CSS3 3rd Edition (2015).pdf",
'HTML5-cheat-sheet.pdf']可以很容易地使用代码将它们移动到DirHTML中:
import shutil
for book in books:
shutil.move(book, 'DirHTML')当我试着
map(shutil.move, books, 'DirHTML')没有文件被移动。如何启用代码?
发布于 2018-01-02 08:21:56
第一个参数之后的每个map参数应该是一个iterable。的确,'DirHTML'是可迭代的,但是迭代它可以获得['D', 'i', 'r', 'H', 'T', 'M', 'L'],这显然不是您想要的。
如果您坚持在这里使用map,请尝试
map(lambda x: shutil.move(x, 'DirHTML'), books)或者也许
map(shutil.move, books, ['DirHTML'] * len(books))这两种方法都不是特别透明或优雅,在后一种情况下,它们都没有必要的低效。
发布于 2018-01-02 09:17:02
首先,让我这样说:您可以这样使用map,但我不认为这是个好主意。它的目的是转换可迭代性,而不是副作用。当用于副作用时,正如您所做的那样,最初的命令式代码要清楚得多。
现在,如果你坚持使用地图,继续读。这里有两个潜在的问题。
首先,正如在其他答案中所解释的那样,您不能以这样的方式传递目标目录。tripleee展示了一些解决方案/解决方案;下面是另一个解决方案:
from functools import partial
map(partial(shutil.move, dst='DirHTML'), books)其次,如果您使用的是Python 3: map是懒惰的。它只在迭代其结果时对其结果进行评估。例如,可以将结果传递给list()
list(map(partial(shutil.move, dst='DirHTML'), books))提示:在shutil.move上编写一个小包装器,打印其参数,以便更好地了解到底发生了什么。
发布于 2018-01-02 08:13:31
来自官方python 这里
如果传递额外的可迭代参数,则函数必须接受该多个参数,并并行地应用于所有可迭代项。
在您的map片段中,它将充当:
for i, j in zip(books, 'DirHTML'):
shutil.move(i, j)DirHTML参数与您预期的一样工作,将整个字符串传递到move中,但按顺序传递每个字符。
https://stackoverflow.com/questions/48057446
复制相似问题