2013-07-15 2 views
4

내가 봤던 것들은 효과가 없었으므로 전문가에게 눈을 돌리고 있습니다.파이썬으로 텍스트 파일에서 캐리지 리턴을 제거하려면 어떻게해야합니까?

필자는 메모장에서 노트를 열고 "모든 문자 표시"를 사용하면 끝에 캐리지 리턴이있는 텍스트를 탭으로 구분 된 텍스트 파일에 있습니다 (끝 부분에 [CR] [LF]가 표시됨). 라인의). 나는이 캐리지 리턴 (또는 그것이 무엇이든)을 제거해야하지만, 나는 그것을 이해하는 것처럼 보이지 않습니다. 여기에 캐리지 리턴과 라인을 보여주는 텍스트 파일의 코드 조각입니다 : 여기

firstcolumn secondcolumn third fourth fifth sixth  seventh 
moreoftheseventh  8th    9th 10th 11th 12th     13th 

내가 그것을 대체하는 데 사용할 노력하고있어 코드입니다,하지만 그것은 반환 찾는 아니에요 :

with open(infile, "r") as f: 
    for line in f: 
     if "\n" in line: 
      line = line.replace("\n", " ") 

내 스크립트는 캐리지 리턴을 찾지 못합니다. 이 캐리지 리턴에 대해 잘못된 것이나 잘못된 가정을하고 있습니까? 텍스트 편집기에서 수동으로 제거 할 수도 있지만이 문제가 포함될 수있는 약 5000 개의 레코드가 텍스트 파일에 있습니다.

추가 정보 : 목표는 텍스트 파일에서 두 개의 열을 선택하는 것이므로 \ t 문자로 분할하고 값을 배열의 일부로 참조하십시오. 그것은 반환하지 않고 모든 행에서 작동하지만 반환과 함께 줄에서 실패합니다. 예를 들어 행에 요소 9가 없기 때문입니다.

따라서 위의 텍스트 행에서 특정 배열에 인덱스 9가 없기 때문에이 코드는 실패합니다. [CR] [LF]가없는 텍스트 줄의 경우 예상대로 작동합니다.

+0

는 \ 연구 \ 없음 "을 검색해보세요을 "는 창에 대한 캐리지 리턴입니다. – rantanplan

+1

줄을 다시 파일에 씁니까? – ovgolovin

+0

\ r \ n을 (를) 검색하지 못했습니다. – mrcoulson

답변

3

기술적으로 대답이 있습니다!

with open(filetoread, "rb") as inf: 
    with open(filetowrite, "w") as fixed: 
     for line in inf: 
      fixed.write(line) 

open(filetoread, "rb")의 B 분명히 내가 그 줄 바꿈에 액세스하고이를 제거 할 수있는 방식으로 파일을 엽니 다. 이 답변은 실제로 스택 오버플로 사용자 인 Kenneth Reitz가 사이트에서 가져온 것입니다.

감사합니다.

1

파일 형식 (및 파일 형식 등)에 따라 캐리지 리턴은 '\r', '\n' 또는 '\r'\n' 일 수 있습니다. 그들이 어떤 것인지 상관없이 제거하는 가장 좋은 방법은 line.rstrip()을 사용하는 것입니다. 당신이 마지막에 될 수있는 여분의 공백을 만 캐리지 리턴을 제거하지 얻을하려면

with open(infile, "r") as f: 
    for line in f: 
     line = line.rstrip() # strip out all tailing whitespace 

, 당신은 rstrip에 선택적 인수를 제공 할 수 있습니다 :

with open(infile, "r") as f: 
    for line in f: 
     line = line.rstrip('\r\n') # strip out all tailing whitespace 

희망이

을하는 데 도움이
0

파이썬은 이른바 universal newline mode이라는 파일을 열어 개행은 항상 \n입니다.

보통 파이썬은 보편적 인 뉴 라인 지원으로 구축됩니다. 'U'를 입력하면 이 파일을 텍스트 파일로 열지 만 줄의 끝은 다음과 같이 중 하나로 종료 될 수 있습니다. Unix 줄 끝 규칙 '\ n', Macintosh 대회 '\ r'또는 Windows 컨벤션 '\ r \ n'. 이 모든 외부 표현은 Python 프로그램에서 '\ n'으로 표시됩니다.

파일을 한 행씩 반복합니다. 그리고 라인에 \n을 대체합니다. 그러나 실제로는 행이 이미 반복자에 의해 \n으로 분리되어 있고 각 행에는 \n이 포함되어 있지 않으므로 \n이 없습니다.

f.read() 파일을 읽을 수 있습니다.그런 다음 \n을 교체하십시오.

with open(infile, "r") as f: 
    content = f.read() 
    content = content.replace('\n', ' ') 
    #do something with content 
+0

이와 같은 콘텐츠에 계속해서 액세스 할 수 있습니까? 내용 입력 행 : – mrcoulson

+0

@mrcoulson 번호 모든 줄 바꿈 문자는 '' '로 대체됩니다. – ovgolovin

+0

선을 어떻게 지키고 그 점에서 [CR] [LF]을 제거 할 것인지 명확하지 않습니다. – ovgolovin

1

저는 이것을 닫을 것입니다. 누군가가 이것이 질문을 종료하는 올바른 방법이 아닌지 알려줍니다. 나는 완전히 잘못된 각도에서 진행하고 있음을 알고 있습니다. 캐리지 리턴을 제거 할 수 있다고하더라도 5000 라인이 아닌 하나의 긴 라인으로 끝납니다.

모든 해답 덕택입니다. 어쨌든 몇 가지를 배웠습니다. 누군가의 시간을 낭비하게해서 유감입니다!

+0

예! 당신 말이 맞아요. 아무도 좋은 대답을 줄 수없는 이유는 아무도 당신이 원하는 것을 이해할 수 없기 때문입니다 (당신은 개행 문자를 제거하고 여전히 줄을 분리하고 싶었습니다). 나는 당신이 질문을 재구성 할 수 있다고 생각합니다. 당신이 달성하고자하는 것의 요점에 이르기까지, 파일의 모든 기능을 가지고있는 입력 파일의 기술적 인 단편을 보여주고, 원하는 출력과 시도한 것을 보여주십시오. 나는 사람들이 여기에서 도울 수있을 것이라고 생각한다. 왜냐하면 이제는 질문이 꽤 복잡하기 때문입니다. – ovgolovin

0

나는 그것을 할 수있는 코드를 만든 그것은 작동 : 여기

end1='C:\...\file1.txt' 
end2='C:\...\file2.txt' 
with open(end1, "rb") as inf: 
    with open(end2, "w") as fixed: 
     for line in inf: 
      line = line.replace("\n", "") 
      line = line.replace("\r", "") 
      fixed.write(line) 
0

임시 파일 사용하지 않고 캐리지 리턴을 제거하는 방법은 다음과 같습니다

with open(file_name, 'r') as file: 
    content = file.read() 

with open(file_name, 'w', newline='\n') as file: 
    file.write(content) 
관련 문제