伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

python学习之做一个文件增删改查小程序

来源:本站原创 浏览:87次 时间:2022-06-29
import osimport refrom typing import Listdef replace(a,a_swp):    a_bak=a+'.bak'    os.rename(a,a_bak)    os.rename(a_swp,a)    os.remove(a_bak)def fetch(domain):    domain=domain    if not domain:        domain=input('please input your domain:').strip()    result=[]    with open('remap.config','r')  as read_f:        for read_line in read_f:            tmpdata=read_line.strip()            if re.search(domain,tmpdata) :                result.append(tmpdata)                print(tmpdata)            else:                continue        if not result:            print("not found")    return resultdef change():    data=input('please input your data:').strip()    data_split=data.split() #分割输入数据取domain,数据格式为map http://domain http://srcip ,则分割后取1下标的数据    olddata=fetch(data_split[1])    if not olddata:        with open('remap.config', 'r')  as read_f,open('remap.config.swp', 'w')  as write_f:            for read_line in read_f:                write_f.write(read_line)            write_f.write(data.strip('"')+'\n')    else:        with open('remap.config', 'r')  as read_f,open('remap.config.swp', 'w')  as write_f:            for read_line in read_f:                tmpdata = read_line.strip()                if re.search(data_split[1], tmpdata):                    write_f.write(data.strip('"')+'\n')                else:                    write_f.write(read_line)    replace("remap.config","remap.config.swp")def add():    data=input('please input your data:').strip()    with open('remap.config', 'r')  as read_f, open('remap.config.swp', 'w')  as write_f:        for read_line in read_f:            write_f.write(read_line)        write_f.write(data.strip('"') + '\n')    replace("remap.config", "remap.config.swp")def delete():    data = input('please input your data:').strip()    olddata=fetch(data)    if olddata:        with open('remap.config', 'r')  as read_f, open('remap.config.swp', 'w')  as write_f:            for read_line in read_f:                tmpdata = read_line.strip()                if re.search(data, tmpdata):                    continue                else:                    write_f.write(read_line)        replace("remap.config", "remap.config.swp")    else:        print("needn't delete")list='''what do you want ?:    1.fetch    2.change    3.add    4.delete    5.exit'''list_dic={    1:fetch,    2:change,    3:add,    4:delete,    5:exit}while True:    print(list)    choice=input('you choice>>: ').strip()    if not choice or not choice.isdigit():        continue    if choice == '5':        break    list_dic[int(choice)]()

如图:remap.config格式如下

map http://baidu.com/ http://1.1.1.17/map http://www.baidu.com/ http://1.1.1.17/regex_map http://[a-z0-9].baidu.com/ http://1.1.1.11/map http://285166825.cdn.baidu.com/ http://1.1.1.11/map http://1731178188.cdn.baidu.com/ http://1.1.1.11/map http://907607712.cdn.baidu.com/ http://1.1.1.11/map http://jmbaihacker.cdn.baidu.com/ http://1.1.1.11/map http://13991833.cdn.baidu.com/ http://1.1.1.11/map http://89802850.cdn.baidu.com/ http://1.1.1.11/map http://jbsdnsn.cdn.baidu.com/ http://1.1.1.11/map http://myl666.cdn.baidu.com/ http://1.1.1.11/map http://cdn-w.cdn.baidu.com/ http://1.1.1.11/

本程序意在熟悉python的函数、文件处理、控制模块功能

个人思路历程以及遇到的问题:

  1. 定义四个功能模块,add()等用pass占位

  2. 打印询问菜单,为了简洁用'''形式

  3. 用while true 循环,发现没退出功能,返回列表,增加一个退出选项5

  4. 用choice变量保存input输入的值,发现无法直接从原有询问列表list提取对应的操作选项,于是使用一个字典list_dic保存选项与操作的对应关系

  5. 发现用户可能不输入数字,于是用str.isdigit()判断客户输入,非数字则跳出本次循环

  6. 开始处理查询功能fetch,发现字符串匹配判断需要用到强大的re模块,此处我用

  7. if re.search(domain,tmpdata):

    意为:如果domain在tmpdata中,则返回匹配对象,加上if则可判断对象是否存在,也就是有没有tmpdata里面有没有匹配到domain   更多参考:https://docs.python.org/zh-cn/3/library/re.html

  8. 处理change功能,发现必先查询,因为我这里默认限制修改功能数据格式为"map http://domain http://srcip“格式,而fetch功能默认只能查找domain,则对change功能的输入用str.split()进行分割提取domain,此处发现,input输入带空格的字符串必须用引号引起来,否则报错

  9. 对fetch功能进行修改:1.如果有参数值则查找的值(即data变量)为参数值,否则输入一个值  2.构建一个空列表result,若查找到值,则用append()方法追加,最后return返回

  10. 文件写入时发现没换行,用+'\n'形式解决

  11. write_f.write(data.strip('"')+'\n')

12.从change()功能模块中摘取对应功能代码略加修改生成add和delete模块

13.发现文件覆盖功能多次使用,提取出来做成replace函数调用

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net