Python 属性错误:'str' 对象没有 'append' 属性

0 投票
1 回答
8122 浏览
提问于 2025-04-18 08:25

我正在尝试找到一个特定文件夹中那些已经存在了30天的文件,把它们移动到一个新文件夹里,然后再把这个新文件夹压缩。不过,当我运行我的脚本时,Python报错了,提示Python属性错误:'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 个回答

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

撰写回答