问题描述
我试图将文件从文件夹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)
这样,您将不会加入带有路径的文件列表:)