Python 属性错误:'str' 对象没有 'append' 属性
我正在尝试找到一个特定文件夹中那些已经存在了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