텍스트 파일을 문자열 변수로 읽고 줄 바꿈을 제거하는 방법은 무엇입니까?


962

다음 코드 세그먼트를 사용하여 파이썬에서 파일을 읽습니다.

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

입력 파일은 다음과 같습니다

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

데이터를 인쇄하면

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

내가 본 것처럼 데이터는 list형식입니다. 문자열을 어떻게 만드나요? 또한 내가 어떻게 제거합니까 "\n", "["그리고 "]"그것에서 문자를?



7
제목과 질문이 일치하지 않습니다. \ n도 제거하고 싶습니까?
Julian

2
파일 / 문자열 내용에서 줄 바꿈을 정말로 제거하겠습니까, 아니면 인쇄 출력의 많은 메타 문자에 대해 혼란스럽고 실제로 줄 바꿈을 유지하고 싶지만 "\ n"으로 표시하지 않겠습니까?
mnagel December

11
검색 엔진에서 여기 온 사람들에게는 아마 @xiaoyu의 답변을 찾고있을 것입니다.
Jonathan Sudiaman

답변:


1318

당신은 사용할 수 있습니다 :

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')

66
open("data.txt").read().replace('\n','')대신 쓰는 데 단점이 있습니까?
tuomassalo

262
예, 버전이 파일을 명시 적으로 닫지 않은 경우 가비지 수집기가 실행되거나 프로그램이 종료 될 때까지 지연됩니다. 'with'문은 일반적으로 일부 설정 / 해제 열기 / 닫기 작업을 캡슐화합니다.
sleeplessnerd

12
설명해 주셔서 감사합니다. 따라서 작은 스크립트에는 내 버전이 괜찮을 것 같지만 OTOH는 습관화하지 않기 위해 피해야합니다.
tuomassalo

10
@tuomassalo 조기 종료해야하거나 예외가 발생하면 열린 파일 핸들을 정리하지 않으므로 테스트 / 디버그 프로세스에서 거대한 PITA입니다.
GoingTharn

13
아니요, rstrip('\n')마지막 줄에서만 줄 바꿈을 replace('\n','')제거하고 모든 곳 에서 줄 바꿈을 제거합니다 (본질적으로 전체 파일을 한 줄로 만듭니다)
sleeplessnerd

630

사용 read()하지 말고 readline():

with open('data.txt', 'r') as myfile:
  data = myfile.read()

6
아마도 OP가 원했던대로 줄 바꿈을 제거하지는 않습니다. 그래도 여전히 마음에 듭니다.
랜달 쿡

60
단일 문자열을 반환하는 경우 줄 바꿈을 제거해도 의미가 없습니다. OP는 목록의 문자열에서 하나의 문자열을 선택하거나 \ n을 제거해야합니다.
Alex Dupuy

유니 코드 파일은 작동하지 않습니다. python3에서 utf8을 지원하려면 추가 인수를 사용하십시오encoding="utf-8"
FindOutIslamNow

2
이 솔루션이 게시 된 이유를 알 수 없으며 너무 많은지지를 받고 있습니다. 기본적으로 1 년 전에 승인 된 것과 동일하며 줄 바꿈 부분이
없어서

65

한 줄로 파일에서 읽을 수 있습니다.

str = open('very_Important.txt', 'r').read()

파일이 명시 적으로 닫히지는 않습니다.

CPython은 파일이 가비지 콜렉션의 일부로 종료 될 때 파일을 닫습니다.

그러나 다른 파이썬 구현은 그렇지 않습니다. 이식 가능한 코드를 작성하려면 with파일을 명시 적으로 사용 하거나 닫는 것이 좋습니다 . 짧은 것이 항상 더 좋은 것은 아닙니다. 참조 https://stackoverflow.com/a/7396043/362951를


32
이것은 항 이디 오마 틱이며 권장하지 않습니다. 명령문 open내에서 사용해야합니다 with ... as.
Jorge Leitao

1
@JC 문제를 설명해 주시겠습니까? 이것은 단지 관습의 문제 with ... as입니까 , 아니면 성명서에 무언가가 있습니까?
Titou

4
@Titou의 문제는 open.read ()가 파일을 닫지 않기 때문에 Pedro의 답변에서 필요 with ... as하거나 str.close()입증 된 것입니다. 더 닫는 파일의 중요성에 여기
JBallin

@JBallin. 이 관용구는 분명히 오류의 원인을 제거합니다. 감사 !
Titou

3
방금 그림자했기 때문에이 또한 나쁜 str()내장 명령에서
Chris_Rands

50

모든 줄을 문자열로 결합하고 새 줄을 제거하려면 일반적으로 다음을 사용합니다.

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 

그것은이보기 내 코드에 UnicodeDecodeError을주고있다 stackoverflow.com/q/18649512/9339242
Arayan 싱

문자 인코딩을 지정해야 할 수도 있습니다.
CONvid19

45

Python 3.5 이상에서 pathlib 를 사용 하면 텍스트 파일 내용을 변수에 복사 하고 파일 을 한 줄로 닫을 수 있습니다 .

from pathlib import Path
txt = Path('data.txt').read_text()

그런 다음 str.replace 를 사용 하여 줄 바꿈을 제거 할 수 있습니다 .

txt = txt.replace('\n', '')

31
with open("data.txt") as myfile:
    data="".join(line.rstrip() for line in myfile)

join ()은 문자열 목록을 결합하고 인수가없는 rstrip ()은 줄 끝을 포함하여 문자열 끝에서 공백을 제거합니다.


12

read () 메소드를 사용하여 수행 할 수 있습니다.

text_as_string = open('Your_Text_File.txt', 'r').read()

또는 기본 모드 자체가 'r'(읽기)이므로 간단히 사용하십시오.

text_as_string = open('Your_Text_File.txt').read()

9

나는 잠시 동안이 주변에 바이올린을하고 사용을 선호했다 read와 함께 rstrip. 이 없으면 rstrip("\n")Python은 문자열 끝에 줄 바꿈을 추가하므로 대부분의 경우 유용하지 않습니다.

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print file_content

6

정확히 무엇을하고 있는지 말하기는 어렵지만 다음과 같이 시작해야합니다.

with open ("data.txt", "r") as myfile:
    data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])

reduce (lambda x, y : x + y.rstrip ( '\ n'), [ 'a \ n', "b \ n", 'c'], "")는 훨씬 더 시원합니다. : D
sleeplessnerd

3
@ 던컨 무엇을 제안 하시겠습니까?
Chris Eberle

data = ' '.join(line.replace('\n', '') for line in myfile)또는 MagerValp의 버전입니다.
던컨

6

splitlines()아직 아무도 언급 하지 않은 것에 놀랐습니다 .

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()

변수 data는 이제 인쇄 할 때 다음과 같은 목록이됩니다.

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

줄 바꿈이 없습니다 ( \n).

그 시점에서 라인을 콘솔에 다시 인쇄하려는 것처럼 들립니다 .for 루프로 달성 할 수 있습니다.

for line in data:
    print line

4

각 줄을 제거하고 최종 문자열로 연결할 수도 있습니다.

myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
    data = data + line.strip();

이것은 또한 잘 작동합니다.


고마워 페드로 이해를 돕기 위해 방금 추가했습니다.
사이 키리 티 바담

3

이것을 두 줄의 코드로 압축 할 수 있습니다!

content = open('filepath','r').read().replace('\n',' ')
print(content)

파일이 다음과 같은 경우 :

hello how are you?
who are you?
blank blank

파이썬 출력

hello how are you? who are you? blank blank

3

이것은 파일 객체를 닫는 한 줄의 복사 가능 붙여 넣기 솔루션입니다.

_ = open('data.txt', 'r'); data = _.read(); _.close()

2
f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print string

2
가있는 루프는 string += line피해야합니다. 파이썬의 일부 버전은 여기에서 O (n ^ 2) 동작을 피할 수 있지만 주어진 다른 답변은 이것보다 낫습니다. 또한 요청한 줄 바꿈을 제거하지 않았으므로 코드가 매우 느리게 수행됩니다.string = f.read()
Duncan

수정 해 주셔서 감사합니다. 그러나 한 가지 작은 점은 테스트 할 때 '\ n'을 인쇄하지 않았기 때문에 새 줄을 제거하지 않아도된다는 것입니다. @Duncan
hungneox

2

python3 : 대괄호 구문이 처음 인 경우 Google "목록 Comphrension".

 with open('data.txt') as f:
     lines = [ line.strip( ) for line in list(f) ]

2

이것을 시도 했습니까?

x = "yourfilename.txt"
y = open(x, 'r').read()

print(y)

1
이것은 잘못이다. 그렇게하려면 y = open (x, 'r'). read ()를 원합니다.
Katastic Voyage

1

귀하의 질문에 [] 부분을 언급 한 사람은 없다고 생각합니다. 각 줄을 변수로 읽을 때 \ n을 ''로 바꾸기 전에 여러 줄이 있었기 때문에 목록을 만들었습니다. x의 변수가 있고 그냥 인쇄하면

엑스

또는 인쇄 (x)

또는 str (x)

괄호와 함께 전체 목록이 표시됩니다. (각 배열의) 각 요소를 호출하면

x [0]은 대괄호를 생략합니다. str () 함수를 사용하면 ''가 아닌 데이터 만 표시됩니다. str (x [0])


1

어쩌면 당신은 이것을 시도 할 수 있습니까? 내 프로그램에서 이것을 사용합니다.

Data= open ('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
    data[i] = data[i].strip()+ ' '
data = ''.join(data).strip()

1

정규식도 작동합니다.

import re
with open("depression.txt") as f:
     l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]

print (l)

[ 'I', 'feel', 'empty', 'and', 'dead', 'inside']


1

파이썬을 사용하여 줄 바꿈을 제거하려면 replace문자열 함수를 사용할 수 있습니다 .

이 예에서는 3 가지 유형의 줄 바꿈을 모두 제거합니다.

my_string = open('lala.json').read()
print(my_string)

my_string = my_string.replace("\r","").replace("\n","")
print(my_string)

예제 파일은 다음과 같습니다.

{
  "lala": "lulu",
  "foo": "bar"
}

이 재생 시나리오를 사용하여 시도해 볼 수 있습니다.

https://repl.it/repls/AnnualJointHardware

여기에 이미지 설명을 입력하십시오


0

작동 : 파일을 다음으로 변경하십시오.

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

그때:

file = open("file.txt")
line = file.read()
words = line.split()

그러면 다음 words과 같은 이름의 목록이 작성됩니다 .

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

"\ n"을 제거했습니다. 방해하는 괄호에 대한 부분에 대답하려면 다음과 같이하십시오.

for word in words: # Assuming words is the list above
    print word # Prints each word in file on a different line

또는:

print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space

이것은 다음을 반환합니다.

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

1
파일 변경은 일회성 상황에서 작동 할 수 있지만 수백 개의 파일이있는 경우 이는 실행 가능한 솔루션이 아닙니다.
Craicerjack

0
with open(player_name, 'r') as myfile:
 data=myfile.readline()
 list=data.split(" ")
 word=list[0]

이 코드는 첫 번째 줄을 읽은 다음 list and split 옵션을 사용하여 공백으로 구분 된 첫 번째 줄 단어를 목록에 저장하도록 변환 할 수 있습니다.

단어에 쉽게 액세스하거나 문자열에 저장할 수 있습니다.

for 루프를 사용하여 동일한 작업을 수행 할 수도 있습니다.


0
file = open("myfile.txt", "r")
lines = file.readlines()
str = ''                                     #string declaration

for i in range(len(lines)):
    str += lines[i].rstrip('\n') + ' '

print str

-1

다음을 시도하십시오 :

with open('data.txt', 'r') as myfile:
    data = myfile.read()

    sentences = data.split('\\n')
    for sentence in sentences:
        print(sentence)

주의 :를 제거하지는 않습니다 \n. 텍스트가없는 것처럼 텍스트를보기위한 것입니다.\n

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.