python - 如何从文件中删除特定行但保持其他行不变?

标签 python strip

我想学习 Python,所以我开始编写我的第一个程序,它是一个电话簿目录。 它具有添加姓名和电话号码、删除号码和搜索号码的选项。 我已经在拆卸部件上卡了大约 2 天了,就是无法正常工作。我一直在 Python IRC 和所有内容中,但一直无法弄清楚。 基本上,我的程序将数字存储到文件中的列表中。我无法弄清楚如何删除文件中的特定行但保持文件的其余部分完好无损。有人可以帮我解决这个问题吗?

有些人建议如果我创建一个临时文件,删除该行,然后将剩余的行从原始文件复制到临时文件,这样做会更容易。然后用临时文件覆盖原始文件。所以我一直在尝试这个...

if ui == 'remove':  
    coname = raw_input('What company do you want to remove? ') # company name
    f = open('codilist.txt', 'r') # original phone number listing        
    f1 = open('codilist.tmp', 'a') # open a tmp file

    for line in f:  
        if line.strip() != coname.strip():    
            for line in f: 
                f1.write(line)                             
            break         # WILL LATER OVERWRITE THE codilist.txt WITH THE TMP FILE
        else:
            f1.write(line)
    else:
        print 'Error: That company is not listed.'    
    f1.close()
    f.close()
    continue

最佳答案

我假设您的文件每一行都包含类似<名称><空白><<编号>之类的内容?如果是这种情况,您可以在 if 语句中使用类似这样的东西(不包括错误处理!):

name, num = line.strip().split()
if name != coname.strip():
    # write to file



建议:

除非有某些特定原因需要您使用自定义格式,否则文件格式 json 非常适合此类任务。另请注意这些示例中“with”语句的使用,这样您就不必显式关闭文件。

写入信息:

import json

# Somehow build a dict of {coname: num,...}
info = {'companyA': '0123456789', 'companyB': '0987654321'}

with open('codilist.txt', 'w') as f:
    json.dump(info, f, indent=4) # Using indent for prettier files

读取/修改文件:

import json

with open('codilist.txt', 'r+') as f:

    info = json.load(f)

    # Remove coname
    if coname in info:
        info.pop(coname)
    else:
        print 'No record exists for ' + coname

    # Add 'companyC'
    info['companyC'] = '0112233445'

    # Write back to file
    json.dump(info, f, indent=4)

这些示例需要 python2.6 或更高版本。如果您使用的是 2.5,则需要这些导入:

import simplejson as json
from __future__ import with_statement

希望对您有所帮助!

关于python - 如何从文件中删除特定行但保持其他行不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148956/

相关文章:

python - 在Python中覆盖文本文件

python - 删除 pandas DF 列上的空格将 bool 值转换为 NaN

c++ - 替换而不升压

mercurial - strip 所做的更改可以反射(reflect)在公共(public) repo 中吗?

PHP - 删除字符串中 HTML 标签的效果 - 但也显示它们?

python - 如何从文本文档中删除\x00字节

python - 如何在 asyncio create_task 中更新全局变量

python - 重置打开的串行端口

python - Azure 流日志功能是否支持 python?

python - matplotlib 中并排饼图的标题