python 第三天 编写文件查询、添加、删除

需求如下:



输出:

    1、获取ha记录

    2、增加ha记录

    3、删除ha记录

num = raw_input(‘请输入操作序号:‘)

如果用户输入的 1

    read = raw_input(‘请输入backend:‘)     如输入:www.oldboy.org

    讲配置文件 backend www.oldboy.org 节点下的所有记录获取到,并输入到终端

如果用户输入的 2

    read = raw_input(‘请输入要新加的记录:‘) 如: {"backend""test.oldboy.org","record":{"server""100.1.7.9","weight"20,"maxconn"30}}

    # 讲read字符串转换成 字典类型

    read_dict = json.loads(read)

    backend_title = read_dict[‘backend‘]

    # 去配置文件中找到指定的节点:

    # backend test.oldboy.org

    # 如果已经存在,

        # 则在此节点下添加根据用输入构造出的记录,例如:

            server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

    # 如果不存在,

        # 则添加backend节点和记录,例如:

    backend test.oldboy.org

        server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000

    # (可选)可以再对节点下记录进行判断是否已经存在

如果用户输入的 3

    read = raw_input(‘请输入要删除的记录:‘) 如: {"backend""test.oldboy.org","record":{"server""100.1.7.9","weight"20,"maxconn"30}}

    # 讲read字符串转换成 字典类型

    read_dict = json.loads(read)

    backend_title = read_dict[‘backend‘]

    #去配置文件中找到指定的节点,并在删除指定记录,如:

    backend test.oldboy.org

         server 100.1.7.10 100.1.7.10 weight 20 maxconn 3000

         server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000   # 删除掉

    # (可选)如果backend下所有的记录都已经被删除,那么将当前 backend test.oldboy.org 也删除掉。



思路如下:



文件处理:
1、查询、、、、判断用户输入,查询关键字,判断是否存在关键字符串,存在打印,不存在则输出
2、增加、、、、判断是否存在backend字段:
   1、存在则判断是否存在要添加字段,存在无动作,不存在则添加。
   2、判断是否存在要添加的记录,存在无动作,不存在则添加。
3、删除、、、、定位到删除的backend关键字
   1、找到相应记录,然后删除,判断删除后此backend字段是否为空,为空则删除backend字段。

代码实现如下:
# -*- coding: utf-8 -*-
__author__ = ‘weibinf‘
import json  #导入模块
import os  #导入模块
def cat():
   read = raw_input("\033[31m请输入backend: \033[0m").strip()
   strr = "backend" + " " + read  #取得输入字段
   obj = open("ha",‘r‘)   #打开方式
   i = 0
   for item in obj:  #取得字段是否存在
       if strr.strip() == item.replace("\n",‘‘).strip():
           i += 1
   if i > 0: #不为0
       exitt = False
       obj.seek(0) #从文件开头重新读取
       while not exitt:  #循环读取
           line = obj.readline().strip() #去掉本行中的空格
           if strr.strip() == line.replace("\n",‘‘).strip(): #判断查询字符串和本行字符串是否相等
               print "\033[34m -\033[0m" * 30
               print "\033[34m %s \033[0m"%line
               obj.seek(obj.tell())
               while not exitt:
                   line = obj.readline()
                   if "backend" in line:#判断本行是否包含backend字段
                       exitt = True   #包含则退出
                   else:
                       print "\033[34m %s \033[0m"%line
   else:
       print  "\033[31m                   你输入的字符串不在文本中。。。 \033[0m"   #不存在打印

def edit():
   read = raw_input("\033[31m请输入要新加的记录: \033[0m").strip()   #获取输入字符串
   read_dict = json.loads(read)  #转换成字典
   backend_title = read_dict[‘backend‘]   #取出key值
   strr = "backend" + " " + str(backend_title)  #取出字符串
   strr1 = " " * 8 + "server" + " " + str(read_dict[‘record‘][‘server‘]) + " " + str(read_dict[‘record‘][‘server‘]) + " " + "weight" + " " + str(read_dict[‘record‘][‘weight‘]) + " " + "maxconn" + " " + str(read_dict[‘record‘][‘maxconn‘])
   with open("ha",‘r‘) as obj , open("haha",‘a+‘) as obj2: #打开两个文件
       i = 0
       for item in obj:
           if strr.strip() == item.replace("\n",‘‘).strip():   #判断字段是否存在
               i += 1
       qa = obj.tell()
       if i == 0:   #不存在则重新写入到文件
           obj.seek(0)
           while True:
               line = obj.readline()
               aa = obj.tell()
               if qa == aa:
                   obj2.write(line)
                   obj2.write("\n")
                   obj2.write(‘%s\n‘%strr)
                   obj2.write(‘%s\n‘%strr1)
                   obj2.flush()
                   break
               else:
                   obj2.write(line)
       elif i == 1:  #字段存在
           exitt = False
           obj.seek(0)
           while not exitt:
               line = obj.readline()
               obj2.write(line)
               bb = obj.tell()
               if strr.strip() == line.replace("\n",‘‘).strip(): #判断字符串和本行是否相等
                   obj.seek(bb)
                   while not exitt:
                       line = obj.readline()
                       cc = obj.tell()
                       if strr1.replace("\n",‘‘).replace(" ",‘‘).strip() != line.replace("\n",‘‘).replace(" ",‘‘).strip(): #字符串和本行是否相等
                           if "backend" in line:  #本行包含backend关键字
                               num = obj.tell() - len(line) - 1
                               obj2.seek(num)
                               obj2.write(‘%s\n‘%strr1)
                               obj2.write(line)
                               obj.flush()
                           elif qa == cc:   #判断文件是否已经是结尾
                                   obj2.write(line)
                                   obj2.write(‘%s\n‘%strr1)
                                   obj.flush()
                                   exitt = True
                           else:   #其余结果
                               obj2.write(line)
                               obj2.flush()
   os.rename("ha","ha.bak")   #重新命名文件
   os.rename("haha","ha")

def dele():
   read = raw_input("\033[31m请输入要删除的记录: \033[0m").strip()
   read_dict = json.loads(read)
   backend_title = read_dict[‘backend‘]
   strr = "backend" + " " + str(backend_title)
   strr1 = " " * 8 + "server" + " " + str(read_dict[‘record‘][‘server‘]) + " " + str(read_dict[‘record‘][‘server‘]) + " " + "weight" + " " + str(read_dict[‘record‘][‘weight‘]) + " " + "maxconn" + " " + str(read_dict[‘record‘][‘maxconn‘])
   with open("ha",‘r+‘) as obj , open("hadel",‘a+‘) as obj2: #打开两个文件
       i = 0
       for item in obj:
           if strr.strip() == item.replace("\n",‘‘).strip():  #判断文件中是否包含关键字符串
               i += 1
       qa = obj.tell()
       if i == 0:
           print "\033[31m你输入的记录不存在。。。 \033[0m"  #不存在输出
       elif i == 1: #存在关键字符串
           exitt = False  #设置全局关键退出字段
           obj.seek(0)  #回到文件开头
           while not exitt:
               line = obj.readline()
               bb = obj.tell()
               if strr.strip() != line.replace("\n",‘‘).strip(): #字符串和本行是否相等
                   obj2.write(line)
                   obj2.flush()
               else:
                   if qa == bb : #是否是文件结尾
                       obj2.write(line)
                       exitt = True
                   else:
                       xs = line
                       while not exitt:
                           line = obj.readline()
                           bb = obj.tell()
                           if strr1.replace("\n",‘‘).replace(" ",‘‘).strip() != line.replace("\n",‘‘).replace(" ",‘‘).strip() : #本行和关键字符串不相等
                               if qa == bb:
                                   obj2.write(line)
                                   exitt = True
                               elif "backend" in line: #本行包含关键字
                                   obj2.write(line)
                                   obj2.flush()
                               else:
                                   obj2.write(xs)
                                   obj2.write(line)
                                   obj2.flush()
                           else:
                               continue
   os.rename("ha","hadel.bak")
   os.rename("hadel","ha")

if __name__ == ‘__main__‘:
   print """\033[31m
       1、获取ha记录
       2、增加ha记录
       3、删除ha记录
       \033[0m"""
   while True:
       num = raw_input("\033[31m请输入相应编号:\033[0m").strip()
       if num == "1":
           cat()
       elif num == "2":
           edit()
       elif num == "3":
           dele()
       else:
           break

时间: 2024-10-29 19:13:29

python 第三天 编写文件查询、添加、删除的相关文章

Python基础(三) 数据类型、文件操作

我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点型以及布尔类型.这些基本数据类型组成了基本控制块,从而创建的Python应用程序. 一.基本结构 1.数值: Python支持不同的数值类型: int (有符号整数): 通常被称为只是整数或整数,是正或负整数,不带小数点. long (长整数 ): 或长,是无限大的整数,这样写整数,后面跟着一个大写或小写的L. 注意:自从Python2.2起,如果整数发生溢出,Python会自动将整数转换为长整数,所以如今在长整数数据后面不加字

git学习(三).gitignore文件忽略和删除本地以及远程文件

一.Git提供了文件忽略功能.当对工作区某个目录或者某些文件设置了忽略后,git将不会对它们进行追踪 问题:最近在github做一个项目,每次成生成的log日志文件和本地IDE的.idea/workspace.xml,每次提交说没有跟踪文件,更郁闷的的我的项目有在本地虚拟机,有时候会出现没有权限跟踪文件. 今天特意解决下问题: 这里有详细的学习:https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%

DataGridView连接Sql数据库 功能 查询 添加 删除 修改

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace _03大项目 { public partial cla

ubuntu14 文件夹添加/删除书签

1. 打开文件管理,进入你要添加书签的目录 2. 把鼠标移到顶部选择“Bookmarks" 3. 这是文件管理左侧可以看到 4. 右键可以选择删除 原文地址:https://www.cnblogs.com/linux-37ge/p/11048673.html

在一个文件中添加删除检查用户脚本

#!/bin/bash Path=/etc/user.conf if [ ! -f $Path ];then touch $Path fi chmod 644 $Path if [2 -ne $# ];then echo "usage:sh adduser {-add|-del|check}" exit 1 fi Age=$1 User=$2 if [ 1 -lt echo '$User' |grep -E "[^a-z,A-Z,0-9,_]" |wc -l ];t

Python编程入门-第三章 编写程序 -学习笔记

第三章 编写程序 1.编辑源程序.运行程序 可通过IDLE中File>New File新建一个文本以编辑源程序,编辑完成可通过Run>Run Module(或者F5快捷键)来运行程序.Python源文件都以.py格式存储. 2.从命令行运行程序 除了上述利用IDLE的集成功能运行程序的方式外,当然也可以通过命令行运行程序,命令格式为:python ‘源文件名称.py’. 3.编译源代码 当运行py格式文件时,Python会自动创建相应的.pyc文件,该文件包含编译后的代码即目标代码,目标代码基

Python 第三天 文件操作

文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. open会自己在Python中找. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读,也

每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容

前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望能够对大家有所帮助. 1.   在列表中为列表项添加子项 为列表添加子项大家都很熟悉,但是如何为列表项添加子项呢?例如列表项是一个文件夹,如何为该文件夹添加子项呢?这里就用到了List.AddItem()方法,具体示例如下: 首先我们要获取列表中的子项: SPListItem root_item=l

python入门三:文件操作

一.文件操作 1.文件对象:和c一样,要想对一个文件进行操作,需要获取该文件的对象 1 f = open("xxx") # 打开文件并获取文件对象 2 f.xxx # 对文件进行某些操作 3 f.close() # 关闭文件 2.访问模式: open函数除了接受一个文件名参数外,还可以设定文件的访问模式(open其他的参数不太能理解) 无   以只读方式打开,文件必须存在 r     以只读方式打开,文件必须存在 w    以只写方式打开, 先删除原有内容再写入新内容,文件不存在创建新