2016-09-19 3 views
0

파이썬에서 tr '\ n' ''을 사용하여 배쉬에서 문제가없는 간단한 구문 분석을 수행하려고합니다. 기본적으로 한 줄에 모든 줄을 가져옵니다. 파이썬 인쇄 라인에서 내가 이해하는 것과는 조금 다릅니다. re.sub는 출력에 인쇄 할 때 존재하지 않기 때문에 새 줄을 찾을 수 없습니다. 누군가가이 문제를 파이썬에서 어떻게 해결할 수 있는지 설명 할 수 있습니까?줄을 읽을 때 파이썬에서 줄 바꿈 바꾸기

# -*- iso-8859-1 -*- 
import re 
def proc(): 
    f= open('out.txt', 'r') 
    lines=f.readlines() 
    for line in lines: 
     line = line.strip() 
     if '[' in line: 
      line_1 = line 
      line_1_split = line_1.split(' ')[0] 
      line_2 = re.sub(r'\n',r' ', line_1_split) 
      print line_2 
proc() 

편집 :

여기에 지금까지 내 코드 나는 "인쇄 라인"줄 바꿈없이 인쇄 할 것이라는 점을 알고있다. 문제는이 작업을 줄 단위로 처리하기 전후에 모두 처리해야한다는 것입니다. 셸의 코드는 sed, awk 및 tr을 사용하여이 작업을 수행합니다.

+0

'line.strip는()'은'\의 n' 포함 _all_ 선도 및 후행 공백을 제거합니다. BTW, 라인 단위로 처리하고 싶다면 전체 파일을'readlines'를 가진리스트로 읽어 들이고리스트를 반복하는 것보다는'for line in f :'를하는 것이 더 낫습니다. –

+2

'print'는 출력의 끝에 개행을 추가합니다. http://stackoverflow.com/q/493386/2800918 – CAB

+0

@CAB 의미를 찾으십시오 – badner

답변

0

replace() 방법을 사용하십시오.

file = open('out.txt', 'r') 
data = file.read() 
file.close() 
data.replace('\n', '') 
+0

이것은 문제를 해결하지 못합니다. 문자열에 시작하는 줄이 없으므로 대체 작업이 수행되지 않습니다. 문제는 실제로 print 문에 있습니다. – Zizouz212

+0

python3에서는 print ('text', end = '')'를 사용하여 새 줄을 이스케이프 처리 할 수 ​​있습니다. – Laszlowaty

+0

이것은 파이썬 3이 아닙니다. 파이썬 2입니다.이 질문에 대한 답은 여전히 ​​그리워합니다. – Zizouz212

1

당신은 print의 자동 줄 바꿈을 방지하기 위해 표준 출력에 직접 쓸 수 있습니다 :이 한 줄에 foobar을 인쇄 할

from sys import stdout 
stdout.write("foo") 
stdout.write("bar\n") 

.

+0

이것이 최고의 대답이라고 생각합니다. 꽤 없지만 가장 효율적으로 보입니다. – badner

1

print 문을 호출하면 자동으로 새 줄을 추가합니다. 쉼표 만 추가하십시오 :

print line_2, 

그리고 모두 같은 줄에 인쇄됩니다.

마음은 파일의 모든 행을 얻고, 하나의 줄에 인쇄하려는 경우,이 작업을 수행하는보다 효율적인 방법이 있습니다 :

또는
with open('out.txt', 'r') as f: 
    lines = f.readlines() 
    for line in lines: 
     line = line.strip() 
     # Some extra line formatting stuff goes here 
     print line, # Note the comma! 

, 단지 라인에 가입 문자열에 :

everything_on_one_line = ''.join(i.strip() for i in f.readlines()) 
print everything_on_one_line 
+0

이것은 핵심적인 문제에 대해 작동하지만 전후의 각 행에서 작업을 처리하는 것은 쉽지 않습니다. – badner

1

with를 사용하면 반복 한 후 파일을 닫습니다 보장합니다.

반복은 메모리를 저장하며 전체 파일을로드하지 않습니다.

rstrip()은 끝에있는 개행을 제거합니다. 결합

:

with open('out.txt', 'r') as f: 
    for line in f: 
     print line.rstrip(), 
+0

이 작동하지만 뭔가 인쇄해야하며 나중에 유용하지 않습니다.내가 var = print 줄을 쓸 수 있다면 좋을 것이다. 그러나 그것은 taht 방식으로는 작동하지 않는다. – badner

관련 문제