问题描述
我试图将文件从文件夹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
1楼
首先,您不应该使用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))
2楼
您已经将可变目的从一行转移到另一行。 您还过度构建了文件路径构造。
您将file_dir
设置为path1
中所有文件的列表。
通过for
命令(在该列表中进行迭代),效果很好。
move
方法需要两个文件名,即简单字符串。
查看如何构造文件名:
os.path.join(file_dir,file)
请记住, file_dir
是path1
中的文件列表 。
file
是该列表中的文件之一。
您想在这里做什么?
您是否打算将path1
与file
串联?
注意 :使用预定义的名称作为变量确实是不好的做法。
file
是预定义的类型。
而是使用f
或local_file
。
3楼
仔细阅读错误消息。
file_dir
是列表。
您不能通过os.path.join加入。
您可能想写:
shutil.move(os.path.join(path1, f), os.path.join(fpath, f))
我建议使用有意义的名称来命名变量,例如:
file_list = os.listdir(path1)
这样,您将不会加入带有路径的文件列表:)