python 2.6 TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

时间:2014-03-28 06:21:06

标签: python unicode python-2.6

我不明白这种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

感谢您的帮助

3 个答案:

答案 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,但这需要我改变我到目前为止的代码。我可能只是要进行程序测试,看看是否正在使用什么操作系统,然后只使用该操作系统命令来压缩文件。