Python替换列表字符串内制表符\t无效问题排查
问题成因
替换没生效是两个Python基础语法规则导致的:
- Python里的字符串是不可变类型,
str.replace()这类字符串操作方法从来不会直接修改原字符串,执行后会返回一个完成替换的新字符串。你写的i.replace("\t"," ")只调用了方法,没有接收返回值,替换好的新字符串直接被丢弃了,根本没存下来。 - 你用
for i in Text_formatted遍历的时候,i只是个临时变量,存的是当前列表元素的引用,就算你给i赋值新内容,也只是让这个临时变量指向别的对象,不会改动原列表里存的内容。
两个问题叠在一起,这段循环跑完等于什么实际修改都没做,原列表当然和之前一模一样。
正确写法
最简洁的方式是直接在列表推导式里把去空白、替换制表符的操作一步做完:
Text_formatted = [text.strip().replace("\t", " ") for text in prozess.stdout.split('\n')]
如果要保留分步处理的逻辑,替换的时候要通过列表索引直接修改原列表的对应位置,不能只改临时遍历变量:
Text_formatted = [text.strip() for text in prozess.stdout.split('\n')] for idx in range(len(Text_formatted)): Text_formatted[idx] = Text_formatted[idx].replace("\t", " ")
内容的提问来源于stack exchange,提问作者citron
相关产品推荐
相关产品推荐

