python-3.x - 将文件夹移动到自身:shutil,检查文件的路径是否与目标路径相同,如果是,则不执行任何操作
问题描述
我有以下代码按预期工作,期望源文件与目标文件相同。我试过os.path. isfile/isdir/exists
了,但我碰壁了。
所以本质上这会循环file_list
并移动列表中的文件到目的地。但是,可能会发生源和目标相同的情况,因此,如果文件的位置与目标相同,那么它会尝试将自身移动到自身并且显然会失败。所以在下面我需要添加一个检查,如果文件的位置(源)与目标相同,那么pass
.
def move_files(file_list, destination):
for file in file_list:
source_file = file
shutil.move(source_file, destination)
在这种情况下目标是文件夹路径,源是文件夹路径+文件名,所以我需要忽略源的文件名并将路径与目标进行比较。
我觉得我过于复杂了,但任何帮助表示赞赏。
解决方案
您可以使用abspath
和的dirname
方法os.path
。第一个返回目录的绝对路径,第二个提供路径的目录名称。
def move_files(file_list, destination):
# just in case you don't provide absolute paths
# you can also consider using `expanduser`
destination = os.path.abspath(destination)
for file in file_list:
file_abs_path = os.path.abspath(file)
if os.path.dirname(file_abs_path) != destination:
shutil.move(file_abs_path, destination)
https://docs.python.org/3/library/os.path.html#os.path.abspath
https://docs.python.org/3/library/os.path.html#os.path.dirname
https://docs.python.org/3/library/os.path.html#os.path.expanduser
推荐阅读
- python - 计数值,使用 Pandas 保留重复项
- java - 添加测试后构建失败,即使脚本中没有错误。在eclipse中使用selenium,testng和maven
- thunderbird - Thunderbird 使用 qmail 扩展回复
- hadoop - 如何使配置单元返回行更快?(比如说,限制 10)
- javascript - React router dom Link 使图像消失
- python - 数据的组循环
- python - 如何在 LED 上显示二进制数(Raspberry Pi GPIO)Python
- spring-boot - Infinispan + Spring Boot - 不缓存
- html - 如何使用 CSS Flexbox 包装行项目?
- swift - 自定义键盘应用程序(IQKeyboardManager 和 SwiftKey)