我正在尝试将文件从文件夹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
答案 0 :(得分:2)
首先,您不应该使用file
作为变量名,它是python的内置函数,请考虑使用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))
答案 1 :(得分:1)
您已经将可变目的从一行转移到另一行。您还过度构建了文件路径构造。
您将file_dir
设置为path1
中所有文件的列表。通过您的for
命令(在该列表中进行迭代),可以很好地工作。 move
方法需要两个文件名,即简单字符串。查看如何构造文件名:
os.path.join(file_dir,file)
请记住,file_dir
是path1
中文件的列表。 file
是该列表中的文件之一。您想在这里做什么?您也许是想将path1
与file
连接起来?
注意:确实不正确的做法是使用预定义名称作为变量。 file
是预定义的类型。而是使用f
或local_file
。
答案 2 :(得分:0)
仔细阅读错误消息。 file_dir
是列表。您不能通过os.path.join加入。您可能要写:
shutil.move(os.path.join(path1, f), os.path.join(fpath, f))
我建议使用有意义的名称来命名变量,例如:
file_list = os.listdir(path1)
这样,您将不会使用路径添加文件列表:)