用python编程移动文件

用python编程移动文件,python,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.jo

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

首先,你不应该使用<代码>文件<代码>作为变量名,它是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))

首先,你不应该使用<代码>文件<代码>作为变量名,它是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))

从一行到下一行,您混淆了变量的用途。您还过度构建了文件路径构造

您可以将
file\u dir
设置为
path1
中所有文件的列表。这可以通过
for
命令正常工作,您可以在该命令中迭代该列表。
move
方法需要两个文件名,即简单的字符串。请查看如何构造文件名:

os.path.join(file_dir,file)
请记住,
file\u dir
path1
中的文件列表
file
是该列表中的一个文件。您想在这里做什么?您可能想将
path1
文件
连接起来吗


注意:使用预定义名称作为变量是非常糟糕的做法。
文件
是一种预定义类型。相反,使用
f
local\u文件

您将变量的用途从一行混淆到下一行。您还过度构建了文件路径结构

您可以将
file\u dir
设置为
path1
中所有文件的列表。这可以通过
for
命令正常工作,您可以在该命令中迭代该列表。
move
方法需要两个文件名,即简单的字符串。请查看如何构造文件名:

os.path.join(file_dir,file)
请记住,
file\u dir
path1
中的文件列表
file
是该列表中的一个文件。您想在这里做什么?您可能想将
path1
文件
连接起来吗


注意:使用预定义名称作为变量是非常糟糕的做法。
文件
是预定义类型。相反,可能使用
f
本地文件

仔细阅读错误消息。
文件目录
是列表。您无法将其与os.path.join连接。您可能需要编写:

shutil.move(os.path.join(path1, f), os.path.join(fpath, f))
我建议使用有意义的名称命名变量,如:

file_list = os.listdir(path1)

这样,您就不会使用以下路径加入文件列表:)

请仔细阅读错误消息。
文件目录是列表。您不能使用os.path.join将其加入。您可能希望写入:

shutil.move(os.path.join(path1, f), os.path.join(fpath, f))
我建议使用有意义的名称命名变量,如:

file_list = os.listdir(path1)

通过这种方式,您将不会使用路径加入文件列表:)

方法
listdir()
返回一个列表,其中包含路径..Do
file\u dir=os.listdir(path1)[0]
可能?
(os.path.join(file\u dir,file)给定的目录中的条目名称
在这里,您试图用字符串连接列表,请再次检查此行。
(os.path.join(file\u dir,file)
应该是
(os.path.join(path1,file)
。方法
listdir()
返回一个列表,其中包含路径..Do
file\u dir=os.listdir(path1)[0]
也许?
(os.path.join(file\u dir,file)
如果您试图用字符串连接列表,请再次检查这一行。
(os.path.join(file\u dir,file)
应该是
(os.path.join(path1,file)
我相信。我想这取决于使用
file
时的2.x与3.x版本,但为了向后兼容(谁这么做?)它可能应该避免。我想它依赖于2.x和3.x,使用
文件
,但是为了向后兼容(谁这么做?),它可能应该避免。