AttributeError: 'list' object has no attribute 'replace' while trying to remove '/n'

AttributeError: 'list' object has no attribute 'replace' while trying to remove '/n'

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

问题是在 split 之后 namelist 中的每个 n 已经是一个 list 字符串。

如果要去掉行尾的换行符,可以将两种推导式反过来,先removesplit,也可以合二为一。此外,您可以使用 strip 代替 replace 来去除行尾的换行符。

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

.readlines() returns 行列表,每行以 \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), [])