在输出每个列表之前解析文本文件并将文本收集到列表对象中

时间:2017-09-07 18:51:45

标签: python python-3.x list parsing

我正在使用具有以下结构的文本文件:

printer_name:
description = printer_description
library = printer_library
form = printer_form

对于数据库中的每台打印机,都会重复此结构。

我正在处理的python脚本的所需输出如下所示:

'printer_name', 'printer_description', 'printer_library', 'printer_form'
'printer_name', 'printer_description', 'printer_library', 'printer_form'

...and so on for every printer record in the text file...

此时,在尝试将每个项目收集到每个记录的列表对象时,我一直遇到构建所需输出的问题。

这是我一直在使用的最新版本:

f = input('Enter file name:')
fh = open(f)

lst = list()
for line in fh:
    line = line.strip()
    if len(line) == 0: continue

    elif line.startswith('description'):
        descList = line.split()
        description = ' '.join(descList[2:])
        lst.append(description)

    elif line.startswith('library'):
        libList = line.split()
        libraryItem = libList[2:]
        library = libraryItem[0]
        lst = lst.append(library)

    elif line.startswith('form'):
        formList = line.split()
        formItem = (formList[2:])
        form = formItem[0]
        lst = lst.append(form)

    else:
        printer = line[:-1]
        lst = lst.insert(0, printer)

print(lst)

此脚本返回Python的属性错误,指示' NoneType'对象没有属性'追加'。这似乎是指我的第一个elif块中的lst.append(description)语句,但是,当我注释掉剩余的elif块并以这种方式运行脚本时,我能够生成一个描述项列表。 / p>

我想是为了获得一个列表'在我获得所需输出的路上,我需要定位print(lst)语句,以便为每个已经构建到自己的行中的打印记录调用它,但我&#39那个方面也遇到了麻烦。

任何人都愿意并能够为我捅这个谜题吗?

我真的很感激!

1 个答案:

答案 0 :(得分:1)

方法append返回None,因此当您尝试lst = lst.append(library)时,将变量设置为None 全部替换:

lst = lst.append(library)
lst = lst.insert(0, printer)

lst.append(library)
lst.insert(0, printer)

如果您需要list lines 你可以试试逻辑:

lines = list()
for line in fh:
    lst = list()
    # You code
    lines.append(lst)