我不明白这种TypeError的原因
脚本:
import os
import shutil
src1 = os.listdir("/usr/dir1")
dst1 = os.listdir("/usr/dir2")
for file in src1:
if file not in dst1:
shutil.copy(file, dst1)
错误:
File "/scripts/trans_dir_balancing.py", line 14, in <module>
shutil.copy(file, dst1)
File "/usr/lib64/python2.6/shutil.py", line 82, in copy
if os.path.isdir(dst):
File "/usr/lib64/python2.6/genericpath.py", line 41, in isdir
st = os.stat(s)
TypeError: coercing to Unicode: need string or buffer, list found
感谢您的帮助
答案 0 :(得分:0)
因为代码中的 dst1 不是路径,所以它是路径列表。它应该是路径(字符串),请查看shutil.copy()以及os.listdir()。
答案 1 :(得分:0)
假设您正在尝试将文件从一个文件夹复制到另一个文件夹,您只需要将目标目录指定为shuti.copy中的第二个参数。
import os
import shutil
src = '/usr/dir1'
dst = '/usr/dir2'
for file in os.listdir(src):
if file not in os.listdir(dst) and os.path.isfile(file):
# copy file to dst dir if not exists
shutil.copy(os.path.join(src, file), dst)
答案 2 :(得分:0)
我知道这篇文章陈旧过时了。然而,几个月后我发现它正在开展一个类似的项目。我正在制作一个程序来备份我的主目录。 这就是我做到的。
for root, dirs, files in os.walk(r'input path of files to be backed up'):
for ckfile in files:
for root2, dirs2, files2 in os.walk(r'input your destination directory'):
if ckfile not in files2:
print"Backing up the file "+ckfile
copyf = os.path.join(root,ckfile)
shutil.copy2(copyf, r'input your destination directory')
else:
print "The file "+ckfile+" is already backed up"
现在,我需要的是一种检查本机压缩的方法。我考虑使用zip,但这需要我改变我到目前为止的代码。我可能只是要进行程序测试,看看是否正在使用什么操作系统,然后只使用该操作系统命令来压缩文件。