从python中的类外部访问类中的多个列表(或其他变量)

时间:2019-01-13 04:42:26

标签: python python-3.x

这个问题以前曾被问过,但是我找不到它,对不起,我想知道是否有一种方法可以访问(或保存)一个类中的多个列表(或其他变量的内容),而不创建列表列表,然后在类之外解构列表列表。

这是一个例子

该类可在所选文件类型的目录中的所有文件上打开,并以列表形式输出每个文件的内容

class WithOpenFilesInDirectory:
def __init__(self, Directory, FileType):
    self.Directory = Directory
    self.FileType = FileType
def LoadFilesList(self):
    for filename in glob.glob(os.path.join(self.Directory, self.FileType)):
        with open(filename, "r") as Output:
            print(filename)
            Output = Output.readlines()
            Output = [x.strip("\n") for x in Output]
            print(Output)

WithOpenFilesInDirectory("data","*txt").LoadFilesList()

这是我在课外寻找的结束格式的示例

File1 = ['contents', 'of', 'file', 'one']
File2 = ['contents', 'of', 'file', 'two']

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

为简单起见,假设我们的两个文件如下所示:

File1.txt

contents
of 
file 
one

File2.txt

contents
of 
file 
two

它们被存储在脚本所在的data目录中。

然后可以从collections.defaultdict列表中的每个文件中收集行。然后,您可以从该词典中调用文件,并对行内容列表进行操作。

演示:

from glob import glob

from os.path import join
from os.path import basename
from os.path import splitext

from collections import defaultdict

class OpenFilesDirectory:
    def __init__(self, directory, filetype):
        self.path = join(directory, filetype)

    def load_files_list(self):
        lines = defaultdict(list)

        for filename in glob(self.path):
            name, _ = splitext(basename(filename))
            with open(filename) as f:
                for line in f:
                    lines[name].append(line.strip())

        return lines

d = OpenFilesDirectory("data", "*.txt").load_files_list()
print(d)

输出:

defaultdict(<class 'list'>, {'File1': ['contents', 'of', 'file', 'one'], 'File2': ['contents', 'of', 'file', 'two']})

然后您可以像这样访问行:

>>> d['File1']
['contents', 'of', 'file', 'one']
>>> d['File2']
['contents', 'of', 'file', 'two']