2017-12-20 9 views
0

이름을 바꿀 파일이 많습니다. 텍스트 파일에서 순서대로 이름을 얻었으므로 텍스트 파일을 읽을 때 삽입되는 줄 바꿈을 제거해야하지만이 오류가 계속 발생합니다. AttributeError : '목록'개체에 '/ n'을 (를) 제거하려고 시도 할 때 '바꾸기'속성이 없습니다.AttributeError : 'list'객체에 '/ n'을 (를) 제거하는 동안 'replace'속성이 없습니다.

모든 도움을 주신 데 대해 정말 잘 모릅니다.

+1

어디에서 선언 이외의'fnames'를 사용하고 있습니까? – oBit91

+0

최종 결과로 평면 목록을 원하십니까? – JacobIRR

답변

2
from os import rename, listdir 


fnames = listdir('.') 
file = open("names.txt", "r") 
namelist = [line.split(' ') for line in file.readlines()] 
namelist = [n.replace('\n', '') for n in namelist] 

print (namelist) 

문제 splitnamelistn 이미 문자열 리스트라는 것이다.

줄 끝 부분에있는 줄 바꿈을 제거하려면 먼저 remove, 그 다음 split의 두 가지 내포를 뒤집을 수 있습니다. 또한 replace 대신 strip을 사용하여 줄의 끝에서 줄 바꿈 문자를 제거 할 수 있습니다.

namelist = [line.strip().split(' ') for line in file] 
+0

'strip()'에 좋은 아이디어입니다. 개행 문자를 공백 문자로 대체하는 것보다 훨씬 더 우아하고 파이썬 적입니다. 운영체제에 따라 '\ n'이 항상 다를 수도 있습니다. – cezar

0

.readlines()는 각각 \n로 끝나는 라인의 목록을 반환합니다. 파일을 읽을 때 보편적 인 개행을 사용하면 (예 : 이 아니라 "rb"이 아닌 경우) 다른 곳에서는 기대할 수 없습니다.

모든 것은 당신이 바로 파일을 반복하는 훨씬 단축을 할 수있다 (너무 선을 산출) :

namelist = [] 
for line in input_file: 
    namelist.extend(line.rstrip('\n').split(' ')) 

재미있는 연습으로, 그것은 한 줄을 (만들어 질 수있다 조금 덜 효율적) :

namelist = sum((line.rstrip('\n').split(' ') for line in file), [])