2015-01-30 1 views
0

나는 python에 익숙하지 않으므로 모든 의견이나 제안을 부탁드립니다. 텍스트 파일에서 사용자 이름과 역할을 꺼내 목록에 저장하여 별도의 파일에 쓸 수 있도록 노력하고 있습니다. 사용자 이름은 동적이므로 매번 그 행이 "admin"으로 시작하는 경우 구문 분석을 시작할 수 없습니다. 사용자 이름은 여러 줄의 텍스트가 있기 때문에 매번 같은 줄에 있지 않으므로 USERNAME으로 시작하는 유일한 정적 줄을 검색하고 사용자 이름이 빈 줄()까지 다음 줄에 있다는 것을 알기 시작합니다.정적 인 줄을 따르는 텍스트 파일의 줄을 파싱

텍스트 파일은 다음과 같은 :

나는 문제가 초기 라인은 "사용자 이름"로 시작하는 경우 파일을 구문 분석하는 동안 다음 행으로 건너하는 방법을 알아내는되어 데
(Dynamic lines of text..) 

USERNAME ROLE 

user345 user 

admin31414 admin 

user113131 user 

user34342 user 

admin585 admin 

user333 user 

user599  user               

. file.next()를 사용하지만 for 루프의 다음 줄 (더 이상 정적은 아님)으로 건너 뛰고 IF 문은 실패합니다. 내 현재 루프 코드는 다음과 같습니다 :

for line in file: 
    if line.startswith('USERNAME'): 
     file.next() 

제가 전에 언급했듯이 저는 어떤 도움이나 제안을 해주시면 감사하겠습니다.

답변

0

당신은 부울을 사용할 수 있습니다 변수는 언제 사용자 이름을 기록해야하는지 기억하지 않아야 하는지를 기억합니다.

record = False 
for line in file: 
    if line.startswith('--END--'): # so you don't catch any extra lines 
     break # this exits the loop 
    if record: 
     print line # or whatever code you want to run on each username 
    if line.startswith('USERNAME'): 
     record = True # this will be visible in the next loop iteration 

이미 '파일'을 반복 할 때 'file.next'를 호출하면 안됩니다. 루프는 'next'호출을 처리합니다. 루프의 다음 반복으로 건너 뛰려면 'continue'문을 사용하십시오.

+0

감사합니다! 이 질문에 대한 답변 – ZackSied

-1

당신은 예를 들어,

with open(r"user.txt", "r") as f: 
    lines = f.read().splitlines() 
    for eachLine in lines: 
     if eachLine.startswith('USERNAME'): 
      pass 
+0

이 질문에 답하지 않고 splitlines()는 파일 메서드가 아닌 문자열 메서드입니다. readlines()를 의미 할 수도 있지만 더 이상 필요하지 않습니다. – dylrei

0

가 아마 가장 쉬운 일이 다시 당신 루프 전에 테스트를 수행 모든 라인을 분할 splitlines을 사용할 수

found_username = False 
for line in file: 
    if found_username: 
     # process line here 
    if line.startswith('USERNAME'): 
     found_username = True 
관련 문제