【问题标题】:List all files in all directory ( MemoryError )列出所有目录中的所有文件( MemoryError )
【发布时间】: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


    【解决方案1】:

    如果我没听错,你可能需要这样的东西:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 2011-06-13
      • 1970-01-01
      • 2014-03-08
      • 2015-06-13
      • 2018-12-21
      • 1970-01-01
      • 2012-11-14
      相关资源
      最近更新 更多