Python AttributeError:' str'对象没有属性'追加'

时间:2014-06-03 14:12:46

标签: python

我正在尝试查找特定目录中30天的文件,将它们移动到新文件夹并压缩该文件夹,但是当我执行我的脚本时,Python会抱怨 Python AttributeError:'str'对象没有属性'append'

import os 
import time 
import sys 
import shutil 
import tarfile
import sys
import os.path
import _strptime 
from array import*


path="/Data/"
now = time.time()
export = os.path.join(path+"archives")

f=[]
m=[]
for root, dirs, files in os.walk(path): #List files in directory 
         for basename in files:
            f.append(os.path.join(root,basename))            
            print(f)
            for i in f:
                mtime=os.stat(i).st_mtime            
                print(i, mtime)
                if mtime > now - 7 * 86400:           
                    m.append(i) 
                    os.makedirs(export,0777)
                    for f in m: 
                        print("moving file", f,  "to",  export)
                        shutil.move(f, export) 
                        tarfile.open(export +time.strftime("%d-%Y-%m") +'.tar.gz', 'w:gz')

                    else:
                        print("Nothing to do")

1 个答案:

答案 0 :(得分:3)

您正在重新声明f变量。它是开头的列表,但后来用于内循环

for f in m: 

使f成为字符串

只需将内部循环变量的名称更改为不同的名称,如

for filename in m: 
    print("moving file", filename,  "to",  export)
    shutil.move(filename, export) 
    tarfile.open(export +time.strftime("%d-%Y-%m") +'.tar.gz', 'w:gz')

如果你将一个变量声明为"内部循环变量"那么python是一个非常普遍的问题。它的范围与"外部"相同。循环所以它会覆盖它的值。

x = 5
print x #prints 5
for a in range(10):
    for x in range(10):
        y=1
print x #prints 9
sth = [ 1 for x in range(20) ]
print x #prints 19