首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用地图移动文件(shutil.move)

用地图移动文件(shutil.move)
EN

Stack Overflow用户
提问于 2018-01-02 07:54:22
回答 3查看 314关注 0票数 0

我想把下面的书移到指定的DirHTML目录中。

代码语言:javascript
复制
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中:

代码语言:javascript
复制
import shutil
for book in books:
    shutil.move(book, 'DirHTML')

当我试着

代码语言:javascript
复制
map(shutil.move, books, 'DirHTML')

没有文件被移动。如何启用代码?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-02 08:21:56

第一个参数之后的每个map参数应该是一个iterable。的确,'DirHTML'是可迭代的,但是迭代它可以获得['D', 'i', 'r', 'H', 'T', 'M', 'L'],这显然不是您想要的。

如果您坚持在这里使用map,请尝试

代码语言:javascript
复制
map(lambda x: shutil.move(x, 'DirHTML'), books)

或者也许

代码语言:javascript
复制
map(shutil.move, books, ['DirHTML'] * len(books))

这两种方法都不是特别透明或优雅,在后一种情况下,它们都没有必要的低效。

票数 0
EN

Stack Overflow用户

发布于 2018-01-02 09:17:02

首先,让我这样说:您可以这样使用map,但我不认为这是个好主意。它的目的是转换可迭代性,而不是副作用。当用于副作用时,正如您所做的那样,最初的命令式代码要清楚得多。

现在,如果你坚持使用地图,继续读。这里有两个潜在的问题。

首先,正如在其他答案中所解释的那样,您不能以这样的方式传递目标目录。tripleee展示了一些解决方案/解决方案;下面是另一个解决方案:

代码语言:javascript
复制
from functools import partial
map(partial(shutil.move, dst='DirHTML'), books)

其次,如果您使用的是Python 3: map是懒惰的。它只在迭代其结果时对其结果进行评估。例如,可以将结果传递给list()

代码语言:javascript
复制
list(map(partial(shutil.move, dst='DirHTML'), books))

提示:在shutil.move上编写一个小包装器,打印其参数,以便更好地了解到底发生了什么。

票数 1
EN

Stack Overflow用户

发布于 2018-01-02 08:13:31

来自官方python 这里

如果传递额外的可迭代参数,则函数必须接受该多个参数,并并行地应用于所有可迭代项。

在您的map片段中,它将充当:

代码语言:javascript
复制
for i, j in zip(books, 'DirHTML'):
    shutil.move(i, j)

DirHTML参数与您预期的一样工作,将整个字符串传递到move中,但按顺序传递每个字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48057446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档