首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Python文件中删除一行

从Python文件中删除一行
EN

Stack Overflow用户
提问于 2011-05-10 09:14:43
回答 5查看 50.4K关注 0票数 10

我正在尝试删除包含特定字符串的特定行。

我有一个名为numbers.txt的文件,其内容如下:

彼得

汤姆

tom1

我要删除的是文件中的tom,因此我创建了以下函数:

代码语言:javascript
运行
复制
def deleteLine():
fn = 'numbers.txt'
f = open(fn)
output = []
for line in f:
    if not "tom" in line:
        output.append(line)
f.close()
f = open(fn, 'w')
f.writelines(output)
f.close()

产出如下:

彼得

如您所见,问题在于函数删除了和tom1,但我不想删除tom1。我只想删除汤姆。这是我想要的输出:

彼得

tom1

有什么想法可以改变这个功能使之正确吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-10 09:18:43

更改行文:

代码语言:javascript
运行
复制
    if not "tom" in line:

至:

代码语言:javascript
运行
复制
    if "tom" != line.strip():
票数 12
EN

Stack Overflow用户

发布于 2011-05-10 09:17:31

那是因为

代码语言:javascript
运行
复制
if not "tom" in line

检查,tom是否不是当前line的子字符串。但是在tom1中,tom是一个子字符串。因此,它被删除。

您可能需要下列之一:

代码语言:javascript
运行
复制
if not "tom\n"==line # checks for complete (un)identity
if "tom\n" != line # checks for complete (un)identity, classical way
if not "tom"==line.strip() # first removes surrounding whitespace from `line`
票数 4
EN

Stack Overflow用户

发布于 2011-05-10 09:23:59

只是为了好玩,这里有一条两条线。

代码语言:javascript
运行
复制
lines = filter(lambda x:x[0:-1]!="tom", open("names.txt", "r"))
open("names.txt", "w").write("".join(lines))

挑战:有人为此贴上一条单线。

您还可以使用文件输入模块获得可读性最高的结果:

代码语言:javascript
运行
复制
import fileinput
for l in fileinput.input("names.txt", inplace=1):
    if l != "tom\n": print l[:-1]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5947833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档