AttributeError:'list'对象在尝试删除'/ n'时没有属性'replace'

时间:2017-12-20 22:55:33

标签: python python-3.x attributeerror

我有一堆我需要重命名的文件。我在文本文件中按顺序获取了名称,我需要删除在读取文本文件时插入的换行符,但我一直收到此错误。 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)

2 个答案:

答案 0 :(得分:2)

问题是split n namelist中的remove已经是字符串。

如果要删除行末尾的换行符,可以将两个推导值反转为第一个split然后replace,或者将它们合并为一个。另外,您可以使用strip代替namelist = [line.strip().split(' ') for line in file] 来删除行尾的换行符。

from utilitybelt import change_charset 

origspace = "abcdefghijklmnopqrstuvwxyz"
keyspace  = "abcd3fgh1jklmnopqr57uvwxyz"

print(change_charset("leetspeak",origspace, keyspace))

#l3375p3ak

答案 1 :(得分: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), [])