2009-12-01 5 views
0

텍스트 파일에 쓸 때 일부 file.write 인스턴스 다음에 출력 파일의 줄 바꿈이오고 다른 일부는 그렇지 않습니다. 내가 하지 마십시오 나는 그들이 발생하도록 말한 부분을 제외하고 linebreaks 싶습니다. 코드 :file.write에서 줄 바꿈을 억제하지 않음

for doc,wc in wordcounts.items(): 
     out.write(doc)    #this works fine, no linebreak 
     for word in wordlist: 
      if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear 
      else: out.write("\t0")      #after each of these 
     out.write("\n")  #this line had mixed spaces/tabs 

무엇이 누락 되었습니까?

업데이트

나는 코드가 SO에 붙여 넣기 방법에서 단서를 촬영해야

. 어떤 이유로 TextMate에서 마지막 줄에 공백과 탭이 섞여있어서 시각적으로이 "for ... for ..."루프 외부에 나타 났지만 인터프리터는이를 루프의 일부로 처리하고있었습니다. 공간을 탭으로 변환하면 문제가 해결됩니다.

입력 해 주셔서 감사합니다.

+0

)이''print' 당신이'에 기록지고 있는지 시각화하는 데 도움이 될하기 위해 호출하는 경우 . 'print foo,'(후행 쉼표)를 사용하여 줄 바꿈을 추가하지 않도록하십시오. – jathanism

답변

4

file.write() 작성한 문자열에 \n이 없으면 개행 문자를 추가하지 않습니다.

그러나 단어 목록의 각 단어에 대한 개행을 out.write("\n")을 사용하여 강제로 하시겠습니까?

for doc,wc in wordcounts.items(): 
     out.write(doc)    #this works fine, no linebreak 
     for word in wordlist: 
      if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear 
      else: out.write("\t0")      #after each of these 
      out.write("\n") #<--- NEWLINE ON EACH ITERATION! 

아마도 너는 out.write("\n")을 너무 많이 들여 썼습니까?

+0

아니요, 각 반복마다 개행을 원하지 않습니다. 단어별로 탭으로 구분 된 각 문서의 개행을 원합니다. – Dan

+0

좋아, 그래서 마지막 out.write 너무 멀리, wordlist에있는 단어와 같은 수준에 있어야합니다 - 루프 (즉, 귀하의 질문에, 4 공백 왼쪽) – Kimvais

1

당신은 모든 단어 뒤에 줄 바꿈을 쓰기 :

for word in wordlist: 
    ... 
    out.write("\n") 

이 당신이보고있는 나누기 라인, 아니면 더 추가 사람이 있습니까?

1

wc[word]마다 strip()을 수행해야 할 수도 있습니다. wc에서 단일 항목을 인쇄하면이 항목의 줄 바꿈이 이미이 문제를 일으키는 영역에 있는지 여부를 판단하기에 충분합니다.

최종 또는 out.write("\n")의 들여 쓰기가 의도 한대로 수행되지 않습니다.

+0

후자는 정확하다고 생각합니다, 전은 오해의 소지가있다 그는 이미 wc [word]가 .strip() ped ...이 될 수있는 문자열이 아니라 정수라는 "% d"% wc [word]를 수행하고 있습니다. – Kimvais

0

들여 쓰기가 잘못되었다고 생각합니다.

(또한 내가 만드는 자유를했다 당신의 절 그`쓰기 (스와핑 : 중복 코드를 읽기

for doc,wc in wordcounts.items() 
    out.write(doc) 
    for word in wordlist: 
    out.write("\t%d" % wc.get(word,0)) 
    out.write("\n") 
관련 문제