列出所有目录中的所有文件(MemoryError)



我写这段代码是为了列出给定路径中的所有文件和子目录,还列出了归档中的文件,然后将它们一起写在一个文件中。这是代码。

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。

如果我答对了,你可能需要这样的东西:

它将输出放到文件中,而不是控制台中。

import os
import shutil
rmpath = []
for root, dirs, files in os.walk("."):
for name in files:
if name.endswith('zip'):
unpacked = os.path.join(root, name).replace('.zip', '_unpacked')
shutil.unpack_archive(os.path.join(root, name), unpacked, 'zip')
rmpath.append(unpacked)
for root, dirs, files in os.walk("."):
for name in files:
if name.endswith('zip'):
continue
with open('file.txt', 'a') as file:
file.write(os.path.join(root, name))
for name in dirs:
with open('file.txt', 'a') as file:
file.write(os.path.join(root, name))
for path in rmpath:
shutil.rmtree(path)

最新更新