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

时间:2018-10-04 16:33:01

标签: python

我正在尝试将文件从文件夹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

3 个答案:

答案 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_dirpath1中文件的列表file是该列表中的文件之一。您想在这里做什么?您也许是想将path1file连接起来?

注意确实不正确的做法是使用预定义名称作为变量。 file是预定义的类型。而是使用flocal_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)

这样,您将不会使用路径添加文件列表:)