我希望将以下书籍移至指定的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')
没有移动文件。 如何使代码工作?
答案 0 :(得分:1)
首先让我这样说:你可以这样使用tvDescription.setText(hashText);
tvDescription.setMovementMethod(LinkMovementMethod.getInstance());
,但我认为这不是一个好主意。它意味着转换迭代,而不是有副作用。当用于副作用时,正如您所做的那样,原始命令代码对IMO来说更加清晰。
现在,如果您坚持使用地图,请继续阅读。这里可能存在两个问题。
首先,正如其他答案中所解释的那样,您无法按照自己的方式传递目标目录。 tripleee显示了一些解决方案/解决方法;这是另一个:
map
其次,如果您正在使用Python 3:地图是懒惰的。它只会在迭代它时评估其结果。例如,您可以将结果传递给from functools import partial
map(partial(shutil.move, dst='DirHTML'), books)
:
list()
提示:在list(map(partial(shutil.move, dst='DirHTML'), books))
周围写一个小包装,打印其参数,以便更好地查看正在发生的事情。
答案 1 :(得分:0)
来自官方python doc here
如果传递了其他可迭代参数,则函数必须采用该参数 许多参数,并应用于所有迭代中的项目 平行
在map
代码段中,它将充当:
for i, j in zip(books, 'DirHTML'):
shutil.move(i, j)
DirHTML
参数与预期的工作一样,将整个字符串传递给move
但按顺序传递每个字符。
答案 2 :(得分:0)
第一个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))
这两者都不是特别透明或优雅,在后一种情况下,不必要地效率低下。