我正在尝试创建多个子目录并将文件移动到这些子目录中,将子目录命名为它所在的循环数,这就是我所拥有的:
for x in range(1,20):
os.makedirs('{}/'.format(replace)+str(x)+'/')
shutil.move(filename,'{}/'.format(replace)+str(x)+'/')
shutil.move(filename1,'{}/'.format(replace)+str(x)+'/')
我收到此错误:
File "testdraft.py", line 285, in findReplace
shutil.move(f, '{}/'.format(replace)+str(x)+'/')
File "/usr/lib/python2.7/shutil.py", line 284, in move
if _samefile(src, dst):
File "/usr/lib/python2.7/shutil.py", line 58, in _samefile
return os.path.samefile(src, dst)
File "/usr/lib/python2.7/posixpath.py", line 162, in samefile
s1 = os.stat(f1)
TypeError: coercing to Unicode: need string or buffer, file found
感谢您的帮助
答案 0 :(得分:0)
大概你的f
是文件对象,而不是文件名。
您实际上没有向我们展示使用shutil.move
调用f
的任何代码;你向我们展示了用名为filename1
的东西调用它的代码。但是变量的名称是什么并不重要;如果您从中获取的文件对象(例如open
函数)保留了它,则不能将其与move
一起使用。
希望您的真实代码与以下内容一样简单:
with open(out_path, 'w') as f:
write_data(f)
shutil.move(f, '{}/'.format(replace)+str(x)+'/')
然后,您只想将最后一行中的f
更改为out_path
,然后就完成了。
答案 1 :(得分:0)
看起来你的filename或filename1变量实际上不是文件名,而是文件对象。 (这是"文件找到的内容"在您的错误结束时试图告诉您。)
此外,您可能需要考虑不首先创建目录:
目标目录不得已存在。如果是目的地 已存在但不是目录,可能会被覆盖 在os.rename()语义上。