当前位置: 代码迷 >> python >> 以编程方式在python中移动文件
  详细解决方案

以编程方式在python中移动文件

热度:73   发布时间:2023-07-16 10:20:28.0

我试图将文件从文件夹path1移到文件夹path

import os
import shutil
path1 = '/home/user/Downloads'
file_dir = os.listdir(path1)
fpath = '/home/user/music'
for file in file_dir:
    if file.endswith('.mp3'):
        shutil.move(os.path.join(file_dir,file), os.path.join(fpath, file))

...但是我得到这个错误

TypeError: expected str, bytes or os.PathLike object, not list

首先,您不应该使用file作为变量名,它是python的内置f ,请考虑改用f

还要注意,在shutil.move行中,我将(os.path.join(file_dir,f)更改为(os.path.join(path1,f)file_dir是一个列表,而不是目录的名称您要查找的内容,该值存储在path1变量中。

总共看起来像这样:

import os
import shutil
path1 = '/home/user/Downloads'
file_dir = os.listdir(path1)
fpath = '/home/user/music'
for f in file_dir:
    if f.endswith('.mp3'):
        shutil.move(os.path.join(path1,f), os.path.join(fpath, f))

您已经将可变目的从一行转移到另一行。 您还过度构建了文件路径构造。

您将file_dir设置为path1中所有文件的列表。 通过for命令(在该列表中进行迭代),效果很好。 move方法需要两个文件名,即简单字符串。 查看如何构造文件名:

os.path.join(file_dir,file)

请记住, file_dirpath1 的文件列表 file是该列表中的文件之一。 您想在这里做什么? 您是否打算将path1file串联?

注意 :使用预定义的名称作为变量确实是不好的做法。 file是预定义的类型。 而是使用flocal_file

仔细阅读错误消息。 file_dir是列表。 您不能通过os.path.join加入。 您可能想写:

shutil.move(os.path.join(path1, f), os.path.join(fpath, f))

我建议使用有意义的名称来命名变量,例如:

file_list = os.listdir(path1)

这样,您将不会加入带有路径的文件列表:)