2013-02-21 1 views
1

저는 코딩이 너무 쉽습니다. 그래서 비슷한 질문을 몇 개 보았지만 아무도 정말로 제가 가진 질문에 대답하지 않았습니다. 나는 이것을 학습 운동으로 시작하여 상대적으로 쉬운 일이라고 생각했지만, 내가 생각했던 것보다 더 많은 문제를 겪고있다.파이썬에서 어떻게 .txt 파일을 분할하고 목록에 원하는 섹션 만 저장할 수 있습니까?

이 같은 일이 발생하는 여러 상황이 .txt 인 문서가있는 경우 :

다음 대답은 허용 : 나는 방법을 알아 내려고 노력하고있어


caía을 문자열을 분리하고 답변을 목록에 추가하십시오.

내가 한 문자열 만 처리했다면 다음과 같이 될까요?

txt = """ 
    The following answer is acceptable: 
    caía 

    more stuff down here... 
    """ 
    list = [] 
    try = txt.split(": ") # I know this is wrong... 
    # How can I get from the colon (or newline) to the end of the answer? 
    list.append(try) 

정말 대답의 말에 대한 대답의 시작부터 잡아 목록에 넣어하는 방법을 알아낼 수 없습니다. 6 개 또는 7 개의 답변이 포함 된 .txt 파일로 작업하기 때문에 (적어도 나에게) 더 복잡하게하려면 모든 답변을 목록에 추가하는 방법을 찾아야합니다. 어떤 종류의 루프가 필요할 것 같아요? txt.readlines를 사용하여 줄 단위로 분할 하시겠습니까? 아니면 내가 현재 익숙하지 않은 것 ...

또한, 내 계획은 종종 .txt 파일의 다른 텍스트 집합을 전환하는 것이 었습니다. 구문은 항상 동일하게 유지되지만 답변의 수는 다를 수 있으므로 프로그램에 n 개의 답변이 있음을 인식하고 그 답변을 모두 추가해야하는 방법을 알아야합니다. 목록 내가 문서의 끝에 도달 할 때까지 얘기하고 있었다.

나는이 사이트가 질문에 대해 매우 엄격하다는 것을 알고 있으므로 모든 규칙을 준수한다고 생각합니다. 나는이 재료를 배우는 중일 뿐이며 내 열정을 뼈에 쥐고있다. 나는 배움의 경험이있는 사람이 정말로 없으며, 책에서 배울 때 많은 질문을합니다. 나는 이것이 좋다는 것을 희망한다.

+1

는 어떻게 알 수 있습니까 출력? 빈 줄이 있습니까? – mtth

+2

* list *와 * try *는 변수 이름으로 사용하면 안됩니다. 예약어입니다. – monkut

+0

@monkut이 @list에'list'와'try'를 변수로 써서 파이썬이 코드에 맞는 것을 던지면 변수들에 밑줄을 추가하면됩니다.'list_' 및'try_' as @mtth는 문자를 필요로하므로 목록에 응답을 추가하는 것을 중지 할 때 또는 목록이 파일의 끝으로 이동하는지 알 수 있습니다. – gabeio

답변

0

대답은 한 줄은 전에 라인을 가정

lines = [line.strip() for line in open('some.txt')] 
nlines=[] 
for line in lines: 
    if line[-1]==':': 
     nlines.append(':'+line) 
    else: 
     nlines.append(line) 
total="\n".join(nlines) 
temp=total.split(':') 
answers=temp[2::2] 
for ans in answers:print ans 

some.txt

first answer: 
first line 1 
second line 1 
third line 1 
second answer: 
first line 2 
secon line 2 
third line 2 
third answer: 
first 3 
second 3 
third 3 
fourth answer: 
first 4 
second 4 
third 4 
fourth 4 

답변이 끝나면

first line 1 
second line 1 
third line 1 


first line 2 
secon line 2 
third line 2 


first 3 
second 3 
third 3 


first 4 
second 4 
third 4 
fourth 4 
0

문제가 너무 복잡해졌습니다. 콜론으로 끝나는 줄을 인식하고, 끝나면 다음 줄에 값을 저장합니다.

txt = """ 
The following answer is acceptable: 
caía 

more stuff down here... 
""" 
results = [] 

chopped_up_text = txt.split('\n') 
for i, line in enumerate(chopped_up_text): 
    if line[-1]==":" : 
     results.append(chopped_up_text[i+1]) 

이것은 일종의 우아하지 않지만 작동합니다.

편집 : 여러 열거 답변에 관한 질문 :

txt = """ 
The following answer is acceptable: 
answer1 
answer2 
answer3 

more stuff down here... 
""" 
results = [] 

chopped_up_text = txt.split('\n') 
n=0 
while chopped_up_text:  
    line = chopped_up_text.pop(0) 
    try: 
     if line.strip()[-1]==":" : 
      line = chopped_up_text.pop(0) 
      while line not in ("\n", "", " ", None): 
       results.append(line) 
       line = chopped_up_text.pop(0) 
    except: 
     continue 

이 늦었어요. 이 코드는 더 아름답습니다. 그러나 당신은 아이디어를 얻습니다.

+0

나는 그가 묻고있는 것을 믿지 않습니다 ... 만약 내가 그렇다면 요청으로 그가를하지 착각 : 'TXT = "" " 다음과 같은 답변을 허용 : caia 뭔가 다른 뭔가 다른 뭔가 다른 " ""' – gabeio

관련 문제