歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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('''\033[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: \033[0m''' % user)
     
  # 打印所有
  if item == 'p':
    while True:
      user_select = open(staff_list,'r')
      s_ = user_select.read()   
      print '                          '
      print '\033[32;1mThe content of the file\033[0m '
      print '\033[32;1m--------------------------\033[0m '
      print s_
      print '\033[32;1m--------------------------\033[0m '
      print '                          '
      break
       
  # 增加
  elif item == 'a':
    while True:
      user_add_num = raw_input(("\033[32;1mplease input your number: \033[0m ").strip())
      user_add_name = raw_input(("\033[32;1mplease input your name: \033[0m ").strip())
      user_add_dept = raw_input(("\033[32;1mplease input your department: \033[0m ").strip())
      user_add_id = raw_input(("\033[32;1mplease input your id: \033[0m ").strip())
      user_item = '%s\t%s\t%s\t%s' %(user_add_num,user_add_name,user_add_dept,user_add_id)
      a.write("\n%s" %user_item)
      a.flush()
      print "\033[32;1mAdd item:\033[0m"
      print "\033[32;1m------------------\033[0m"
      print user_item
      print "\033[32;1m------------------\033[0m"
      print "\033[32;1mAdded successful!\033[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 "\033[32;1mDelete item:\033[0m"
        print "\033[32;1m------------------\033[0m"
        print " %s " %line
        _counter += 1 # 計數器,判斷輸入值命中次數
        print "\033[32;1m------------------\033[0m"
        print "\033[32;1mDeleted successful!\033[0m"
        if _counter == 0:
              print 'nothing delete!'
        shutil.move('contact_list.txt.new','contact_list.txt')
        # 退出刪除
        user_del_input_quit = raw_input("\033[32;1mpress Q for quit or press any key to continue? \033[0m").strip()
        if user_del_input_quit == 'Q':
            break   
     
     
  # 查詢
  elif item == 's':
    while True:
      match_yes = 0
      #輸入判斷,忽略空格輸入,加入顏色
      user_select_input = raw_input("\033[32;1mplease input sth to search:\033[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("\033[32;1mpress Q for quit or press any key to continue? \033[0m").strip()
        if user_select_input_quit == 'Q':
            break   
   
  # 修改
  elif item == 'u':
    while True:
      # 輸入為空以及匹配查詢內容判斷
      user_update_input_from = raw_input("\033[32;1mplease search sth to update: \033[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("\033[32;1mupdate %s to what?\033[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 "\033[32;1mupdate item:\033[0m"
            output_ = commands.getoutput("diff contact_list.txt contact_list.txt.bak|grep '^>.*' | sed 's/^>//g'")
        print "\033[32;1m---------------------------\033[0m"
            print output_
        print "\033[32;1m---------------------------\033[0m"
        print "\033[32;1mupdate successfully!\033[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("\033[32;1mpress Q for quit or press any key to continue? \033[0m").strip()
        if user_update_input_quit == 'Q':
        break 
       
         
  # 退出
  elif item == 'q':
    print 'bye!'
    sys.exit()
     
  else:
    print "\033[31;1mnot a valid key word\033[0m"
    time.sleep(1)

Copyright © Linux教程網 All Rights Reserved