2017-12-20 11 views
0

名前を変更する必要があるファイルがたくさんあります。私はテキストファイルで順番に名前を持っているので、テキストファイルを読むときに挿入される改行を削除する必要がありますが、このエラーが発生しています。 AttributeError: 'list'オブジェクトに '/ n'を削除しようとしているときに 'replace'属性がありません。AttributeError: 'list'オブジェクトに '/ n'を削除しようとしているときに 'replace'属性がありません

何かすべてのサポートがありがとうございます。

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) 
+1

ここで、宣言以外の 'fnames'を使っていますか? – oBit91

+0

最終結果としてフラットリストが必要ですか? – JacobIRR

答えて

2

問題がsplitnamelistの各nはすでに文字列のリストであるということです。

行の最後に改行を削除する場合は、最初にremove、次にsplitに2つの補完を逆順にするか、または1つに結合するだけです。また、replaceの代わりに、stripを使用すると、行末の改行文字を取り除くことができます。

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

'strip()'の良いアイデアです。改行文字をスペースで置き換えるよりも、よりエレガントで無益です。オペレーティングシステムによっては、必ずしも '\ n 'ではないかもしれません。 – cezar

0

.readlines()各々は\nで終わる、行のリストを返します。他の場所に期待する必要はありません(ファイルを読むときに普遍的な改行を使用すると、"r"ではなく"rb")。

全体のことはずっと短くすることができるが、あなただけのファイル(それはラインをもたらし、あまりにも)を反復です:楽しいエクササイズとして

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

、それは(ワンライナー行うことができます少し効率が悪いです):

namelist = sum((line.rstrip('\n').split(' ') for line in file), []) 
関連する問題