Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Python简单的文件增删改查处理

一直在研究python编程,据圈内朋友闲聊,python应该是未来一个运维攻城狮除了shell以外必备的LINUX脚本语言,所以就硬着头皮,按照老男孩的python视频讲座,把自己的研究成果贴出来,目前还没学完,期待更加给力些。PS:1.python视频讲座很不错,希望能继续免费下去。。。
2.博主编程很烂,有什么地方有问题,还请多多指教。。。
3.最近买了本PYTHON核心编程,啃书ing。。。系统环境: Ubuntu 12.10 server 64-bit
PYTHON: Python 2.7.3
# mkdir python
# vi contact_list.txt
-------------------------
1 zhangsan IT 0001
2 lisi IT 0002
3 wangwu HR 0003
4 zhaoliu OP 0004
-------------------------
# vi staff_list.py
----------------------------------------------------
#!/usr/bin/env python
#encoding:utf-8 # 支持中文输入
import sys
import getpass
import shutil
import commands
import time
import fileinput
staff_list = "contact_list.txt"
# 参数配置
user = "admin"
passwd = "123456"
s = file(staff_list)
ss = s.readlines()
a = file(staff_list,"a")
counter = 0
_counter = 0
# 认证登陆
while True:
  # 计数器,超过3次强制退出
  if counter <= 3:
    # 空用户名判断
    name = raw_input("please input your name: ").strip()
    if len(name) == 0:
      print "empty name,try again!"
      continue
    # 用户名密码判断,密码隐藏
    # pwd =  raw_input("please input your password: ")
    pwd = getpass.getpass("please input your password:")
    if pwd == passwd and name == user:
      print "Welcome to login,%s" %name
    else:
      print "name or password is not valid,please try again!"
          counter +=1
      continue
    break
  else:
    print "exceeded 3 times user login..exit the script"
    sys.exit()
# 选择增删改查
while True:
  item = raw_input("""33[36;1mWelcome to login %s, what do you want to do?
-----------------------
press "p" for print
press "a" for add
press "d" for delete
press "u" for update
press "s" for select
press "q" for quit
-----------------------
please make your choise: 33[0m""" % user)
     
  # 打印所有
  if item == "p":
    while True:
      user_select = open(staff_list,"r")
      s_ = user_select.read()   
      print "                          "
      print "33[32;1mThe content of the file33[0m "
      print "33[32;1m--------------------------33[0m "
      print s_
      print "33[32;1m--------------------------33[0m "
      print "                          "
      break
       
  # 增加
  elif item == "a":
    while True:
      user_add_num = raw_input(("33[32;1mplease input your number: 33[0m ").strip())
      user_add_name = raw_input(("33[32;1mplease input your name: 33[0m ").strip())
      user_add_dept = raw_input(("33[32;1mplease input your department: 33[0m ").strip())
      user_add_id = raw_input(("33[32;1mplease input your id: 33[0m ").strip())
      user_item = "%s %s %s %s" %(user_add_num,user_add_name,user_add_dept,user_add_id)
      a.write(" %s" %user_item)
      a.flush()
      print "33[32;1mAdd item:33[0m"
      print "33[32;1m------------------33[0m"
      print user_item
      print "33[32;1m------------------33[0m"
      print "33[32;1mAdded successful!33[0m"
         
      # 删除空行
      del_blank_in = open("contact_list.txt","r")
      del_blank_out = open("contact_list_new.txt","w")
      lines = del_blank_in.readlines()
      for blank in lines:
        if blank.split():
          del_blank_out.writelines(blank)
      del_blank_in.close()
      del_blank_out.close()
      # 覆盖原文件
      shutil.move("contact_list_new.txt","contact_list.txt")
      user_add_choise = raw_input("press Q for quit or press any key to continue: ")
      if user_add_choise == "Q":
          print "bye!"
          break
       
  # 删除
  elif item == "d":
    while True:
      user_del_input = raw_input("please input sth to delete: ").strip()
      if len(user_del_input) == 0:
        print "empty input,try again!"
      else:
        # 输入值与源文件比对,有则丢弃,没有则添加到新文件,最后新文件覆盖源文件,实现删除功能
        with open("contact_list.txt","r") as ff:
          with open("contact_list.txt.new","w") as gg:
            for line in ff.readlines():
              if user_del_input not in line:
                gg.write(line)
          if user_del_input in line:
        print "33[32;1mDelete item:33[0m"
        print "33[32;1m------------------33[0m"
        print " %s " %line
        _counter += 1 # 计数器,判断输入值命中次数
        print "33[32;1m------------------33[0m"
        print "33[32;1mDeleted successful!33[0m"
        if _counter == 0:
             print "nothing delete!"
        shutil.move("contact_list.txt.new","contact_list.txt")
        # 退出删除
        user_del_input_quit = raw_input("33[32;1mpress Q for quit or press any key to continue? 33[0m").strip()
        if user_del_input_quit == "Q":
            break   
     
     
  # 查询
  elif item == "s":
    while True:
      match_yes = 0
      #输入判断,忽略空格输入,加入颜色
      user_select_input = raw_input("33[32;1mplease input sth to search:33[0m ").strip()
      contact_file = file (staff_list)
      if len(user_select_input) == 0:
        print "empty input,try again!"
      else:
        while True:
      line = contact_file.readline()
          if len(line) == 0:
          break
      if user_select_input in line:
          match_yes = 1
          print line
      else:
          pass
        if match_yes == 0 :
          print "No match item found"
      # 退出查询
        user_select_input_quit = raw_input("33[32;1mpress Q for quit or press any key to continue? 33[0m").strip()
        if user_select_input_quit == "Q":
            break   
   
  # 修改
  elif item == "u":
    while True:
      # 输入为空以及匹配查询内容判断
      user_update_input_from = raw_input("33[32;1mplease search sth to update: 33[0m").strip()
      update_match = 0
      update_file = file(staff_list).readlines()
      for n_ in range(len(update_file)):
    if user_update_input_from in update_file[n_]:
        update_match = 1
    else:
        pass
      if update_match == 0:
        print "No match item found"
      elif len(user_update_input_from) == 0:
        print "empty input,try again!"
      else:
    # 将匹配到的字符修改为新字符
    while True:
      user_update_input_to = raw_input("33[32;1mupdate %s to what?33[0m " %(user_update_input_from)).strip()
      if len(user_update_input_to) == 0:
            print "empty input,try again!"
      else:
        for line_ in fileinput.input(staff_list,inplace = 1,backup=".bak"):
          line_ = line_.replace(user_update_input_from,user_update_input_to)
          print line_
        # 打印修改字符的行
            print "33[32;1mupdate item:33[0m"
            output_ = commands.getoutput("diff contact_list.txt contact_list.txt.bak|grep "^>.*" | sed "s/^>//g"")
        print "33[32;1m---------------------------33[0m"
            print output_
        print "33[32;1m---------------------------33[0m"
        print "33[32;1mupdate successfully!33[0m"
            # 删除空行
            del_blank_in = open("contact_list.txt","r")
            del_blank_out = open("contact_list_new.txt","w")
            lines = del_blank_in.readlines()
            for blank in lines:
          if blank.split():
            del_blank_out.writelines(blank)
            del_blank_in.close()
            del_blank_out.close()
            # 覆盖原文件
            shutil.move("contact_list_new.txt","contact_list.txt")
        break
    # 退出更新
    user_update_input_quit = raw_input("33[32;1mpress Q for quit or press any key to continue? 33[0m").strip()
        if user_update_input_quit == "Q":
        break 
       
         
  # 退出
  elif item == "q":
    print "bye!"
    sys.exit()
     
  else:
    print "33[31;1mnot a valid key word33[0m"
    time.sleep(1)推荐阅读:Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htmPython 网站文件及数据库备份脚本 http://www.linuxidc.com/Linux/2012-06/62346.htmPython文件处理:读取文件 http://www.linuxidc.com/Linux/2013-08/88496.htm如何发布自定义的Python模块 http://www.linuxidc.com/Linux/2013-08/88495.htmPython爬虫多线程抓取代理服务器 http://www.linuxidc.com/Linux/2013-07/87289.htmPython中re(正则表达式)模块详解 http://www.linuxidc.com/Linux/2013-08/88588.htmPython 的详细介绍:请点这里
Python 的下载地址:请点这里