【发布时间】:2021-12-28 21:04:24
【问题描述】:
我编写了这段代码来列出给定路径中的所有文件和子目录,还列出存档中的文件,然后将它们一起写入一个文件中。这是代码。
import os
from tkinter import filedialog
from tkinter import *
import zipfile
import rarfile
root = Tk()
root.withdraw()
path = filedialog.askdirectory()
l1 = []
ls1 = []
k1 = []
ks1 = []
z1 = []
r1 = []
filenamez = []
for dirname, dirnames, filenames in os.walk(path):
# print path to all subdirectories first.
for subdirname in dirnames:
l = os.path.join(dirname ,subdirname)
ls = os.path.join('in {} is {}'.format(dirname ,subdirname))
ls1.append(ls)
l1.append(l)
l3 = os.walk(l)
# print (l)
for root,dirs, files in l3:
for f in files:
a = os.path.join(root,f)
filenamez.append(a)
for zips in filenamez:
if str(zips).endswith('.zip'):
zip = zipfile.ZipFile(zips)
zname = zip.namelist()
for zn in zname:
zn = ('in {} is {}'.format(zips,zname))
z1.append(zn)
for rars in filenamez:
if str(rars).endswith('.rar'):
rar = rarfile.RarFile(rars)
rname = rar.namelist()
for rn in rname:
rn = ('in {} is {}'.format(rars,rname))
r1.append(rn)
# print path to all filenames.
for filename in filenames:
k = os.path.join(dirname,filename)
ks = os.path.join('in {} is {}'.format(dirname,filename))
ks1.append(ks)
k1.append(k)
k3 = os.walk(k)
for root,dirs, files in k3:
for f in files:
a = os.path.join(root,f)
filenamez.append(a)
for zips in filenamez:
if str(zips).endswith('.zip'):
zip = zipfile.ZipFile(zips)
zname = zip.namelist()
for zn in zname:
zn = ('in {} is {}'.format(zips,zname))
z1.append(zn)
for rars in filenamez:
if str(rars).endswith('.rar'):
rar = rarfile.RarFile(rars)
rname = rar.namelist()
for rn in rname:
rn = ('in {} is {}'.format(rars,rname))
r1.append(rn)
在小型目录中它工作得很好,但在大型目录中它会给我 MemoryError。我的目标是否有任何其他简单的工作代码来列出目录、子目录和档案的内容或简化我的代码或处理 MemoryError ?
附:我使用的是 64 位 Python。
【问题讨论】:
标签: python python-3.x list memory error-handling