파이썬에서는
temp = open(filename,'r').readlines()
를 호출하면 각 요소가 파일의 줄인 목록이 생성됩니다. 약간 어리석지만 여전히 readlines()
는 각 요소에 개행 문자를 쓰는데, 이는 제가 원하지 않는 일입니다.
이 문제를 어떻게 피할 수 있나요?
str.splitlines`](https://docs.python.org/2/library/stdtypes.html#str.splitlines)를 사용하여 전체 파일을 읽고 줄을 분할할 수 있습니다:
temp = file.read().splitlines()
또는 손으로 줄 바꿈을 제거할 수도 있습니다:
temp = [line[:-1] for line in file]
**참고: 이 마지막 방법은 파일이 줄 바꿈으로 끝나는 경우에만 작동하며, 그렇지 않으면 마지막 줄에서 한 문자가 손실됩니다.
이 가정은 대부분의 경우에 해당합니다(특히 텍스트 편집기에서 만든 파일의 경우, 어차피 종료 줄 바꿈이 추가되는 경우가 많습니다).
이를 방지하려면 파일 끝에 줄 바꿈을 추가하면 됩니다:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
또는 더 간단한 대안은 줄 바꿈 대신 줄을 '스트립'하는 것입니다:
[line.rstrip('\n') for line in file]
또는 꽤 읽기 어렵지만:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
의 반환값이 부울이 아니라 참 또는 거짓으로 평가된 객체라는 점을 악용합니다.
readlines` 메서드는 실제로 다음과 같습니다:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
readline()은 줄바꿈도 유지하므로
readlines()`도 줄바꿈도 유지합니다.
참고: readlines()
와 대칭을 위해 writelines()
메서드는 끝줄을 추가하지 않으므로 f2.writelines(f.readlines())
는 f2
에 f
의 정확한 복사본을 생성합니다.
또 다른 예를 들어:
당시 1 행 파일을 읽지. 원치 않는 자 끝을 함께 제거 에서 문자열 ['스트리스트리프 (자)'] [1]
with open(filename, 'r') as fileobj:
for row in fileobj:
print( row.rstrip('\n') )
또한 '지켜보리니 스트리스트리프 ([자])' 와 '스트리우스트리프 ([자])'
[1]: https://docs.python.org/2/library/stdtypes.html # 스트리스트리프
(= 2.0tb 파이썬 >)
이거 드세요.
u=open("url.txt","r")
url=u.read().replace('\n','')
print(url)
모든 앞뒤의 지루려면 공백 (Абага& # 39 의 오토메이티드 에서 영감을 받은) -
temp = [line.strip() for line in open("filename")]
줄 바꿈 - 등 모든 후행 휘트스파시스 지루려면
temp = [line.rstrip() for line in open("filename")]
싶을 뿐 아니라 경우 절감뿐만 개행 문자를 뒤에 공백 -
temp = [line.rstrip('\r\n') for line in open("filename")]
def getText():
file=open("ex1.txt","r");
names=file.read().split("\n");
for x,word in enumerate(names):
if(len(word)>=20):
return 0;
print "length of ",word,"is over 20"
break;
if(x==20):
return 0;
break;
else:
return names;
def show(names):
for word in names:
len_set=len(set(word))
print word," ",len_set
for i in range(1):
names=getText();
if(names!=0):
show(names);
else:
break;