用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()
返回一个列表,其中包含路径..Dofile\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()
返回一个列表,其中包含路径..Dofile\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,使用文件,但是为了向后兼容(谁这么做?),它可能应该避免。