2017-09-07 1 views
1

를 출력하기 전에 목록 객체에 텍스트를 수집 :는 텍스트 파일을 구문 분석하고 나는 다음과 같은 구조를 가지고 텍스트 파일로 일하고 있어요 각 목록

printer_name: 
description = printer_description 
library = printer_library 
form = printer_form 

이 구조는 데이터베이스의 모든 프린터에 대해 반복합니다.

내가 같을 것이다 일하고 있어요 파이썬 스크립트의 원하는 출력 :이 시점에서

'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) 

이 스크립트는 'NoneType'개체가 어떤 속성을 '추가'를이 없음을 나타내는 파이썬의 속성 오류를 반환

는 여기에 내가 작업했던 최신 버전입니다. 이것은 첫 번째 elif 블록의 lst.append (description) 문을 참조하는 것으로 보입니다. 그러나 나머지 Elif 블록을 주석 처리하고 스크립트를 그런 식으로 실행하면 설명 항목의 단일 목록을 생성 할 수 있습니다.

원하는 출력을 얻는 방법에 대한 목록의 '목록'을 얻으려면 print (lst) 문을 위치시켜 모든 인쇄 레코드에 대해 호출해야합니다. 그것의 자신의 선으로 건축되었다, 그러나 나는 또한 저면으로 말썽이 있고있다.

나를 위해이 퍼즐을 찌르는 사람은 누구입니까?

정말 감사하겠습니다.

답변

1

방법 append 반환 None, 그래서 당신은 lst = lst.append(library) 설정을하려고하면 변수에 None 모두 교체 : 당신이 시도 할 수 있습니다 당신이 list lines의 필요한 경우

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

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

에 논리 :

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

정말 대단합니다. 제가 지금 가까이있는 것을 지적 해 주셔서 감사합니다. 그럼에도 불구하고 결과는 하나의 큰 목록으로 돌아옵니다. 나는이 시점에서 네 개의 모든 항목 [:: 4]을 건너 뛰고 각 인스턴스를 별도의 목록으로 반환하고 기존의 큰 목록에서 목록을 수집 할 수 있다고 생각합니다. 이것에 대해 더 많은 노력을 할 것입니다 ... –

+0

당신을 도울 수있어서 기쁘다. 답을 받아 들일 것을 잊지 말고 업데이트를 읽으면 도움이 될 것입니다. –

+0

감사합니다. 이제는 모든 항목을 각자의 개별 목록에 넣는 것으로 보입니다. db의 모든 프린터 레코드에 대해 구분 된 문자열의 한 줄로 db의 각 레코드를 출력하는 데 필요한 출력 목표를 향해 계속 노력하고 있습니다. –

관련 문제