python操作csv文件实战(创建、追加、修改、删除)

大家好,本篇博客目的是建立存储和查询用户名和密码的python系统,基础好的可跳过中间小干货,源码在末尾,喜欢的留下小赞哦!

目录

  • 系统主要功能
  • 需提前掌握的知识
  • 项目相关资料
  • 打印功能提示函数
  • 创建新用户及密码函数
    • 利用open操作文件的参数详解,注意实践区别各参数的不同
  • 密码强弱评分函数
    • 其它密码强弱判断方式
  • 修改值定用户的密码
  • 显示当前所有用户信息
  • 可运行源码
  • 系统如何进一步完善
  • 大家加油学习啊!男儿当自强!

系统主要功能

主要功能如下:

  • 创建一个新用户及其密码
  • 修改值定用户的密码
  • 显示所有用户
  • 创建一个新的CSV文件存储数据
  • 退出系统

若用户选择1,则应输入需创建的新用户ID。检查用户ID是否已经存在系统中。如果用户已存在,则要求重新选择另一个用户名(User ID)。输入适当的用户名(User ID)后,应要求输入密码。密码满足以下任何一个条件得1分:
 至少应包含8个字符;
 应包括大写字母;
 应包含小写字母;
 应该包括数字;和
 应至少包含一个特殊字符,例如!, $, %, ^, &, *, (, ), ?, @, #
如果用户输入的密码得分score<=2,则应拒绝并提示它是弱密码;
如果得分为2<=score<=4,请告诉他们“可以改进此密码” ,并询问用户是否想加强密码。
如果score=5,强密码,设置成功。将此用户ID和密码添加到.csv文件中。

如果他们从菜单中选择2,则输入用户ID以及密码,检查是否为系统用户并原密码正确,则允许用户更改密码并保存更改到.csv文件。
如果用户从菜单中选择3,则显示所有用户ID,但不显示密码。
如果用户从菜单中选择4,则新建CSV文件存储数据。
如果用户从菜单中选择5,则停止并退出该程序。
如果用户没有在第一个菜单上选择相关选项,应该显示适当的提示消息。

需提前掌握的知识

  • 如果想要亲手一句代码一句代码完成本项目,需要掌握基本的python语法,如何打开文件、追加、关闭
  • pandas包
  • csv包
  • 列表的细节应用
  • 正则表达式

项目相关资料

这里列举一些本人查阅的相关资源,省去大家搜寻资源的时间。

  • 十分钟学会pandas
  • python csv库用法大全
  • 正则表达式(推荐菜鸟教程)
  • python读写、创建文件、文件夹等等
  • python 读写csv文件(创建,追加,覆盖)
  • 利用python判断CSV表中存在A列不存在B列的数据并导出
  • 用python中pandas模块在csv文件中添加表头

打印功能提示函数

# 打印功能提示
def printMenu():
    print("************************")
    print("1.创建一个用户ID")
    print("2.修改密码")
    print("3.显示所有用户")
    print("4.创建一个新的CSV文件记录数据")
    print("5.退出系统")
    print("************************")

创建新用户及密码函数

# 创建用户ID及密码
def CreateUserID():
    global NewID
    global PassWord
    
    path = "aa.csv"      #通过CreateCsvFile()函数提前创建
    NewID = input('请输入你想创建的用户名:')
    data=pd.read_csv(path,sep=',',encoding='utf-8')  #encoding='unicode_escape' 'utf-8' 'GBK'注意区分这几种编码格式
    a=data['UserID'].tolist()  #将此列转换成列表
    while True:
        if NewID in a:
            print("用户名已存在,请重新选择\n")
            NewID = input('请重新输入你想创建的用户名:')
        else:
            PassWord = ScorePassword()
            #a+:追加模式,将新用户名和密码追加到文件末尾
            with open(path,'a+',newline="") as f:   #使用csv包操作文件,若出现空行,则应加上newline=""参数
                csv_write = csv.writer(f)
                data_row = [NewID,PassWord]
                csv_write.writerow(data_row)
            break

利用open操作文件的参数详解,注意实践区别各参数的不同

python操作csv文件实战(创建、追加、修改、删除)_第1张图片

密码强弱评分函数

#密码评分
def ScorePassword():
    yourpassword = input("请你为该用户设置密码:")
    strength_level = 0
    if len(yourpassword) >= 8:  #字符串长度至少为8
        strength_level += 1
        if len(yourpassword) >= 8:
            strength_level += 1
            
        upper = re.compile('[A-Z]+')
        match = upper.findall(yourpassword)  #findall函数查询参数是否存在大写
        if match:
            strength_level += 1
        
        lower = re.compile('[a-z]+')
        match = lower.findall(yourpassword)  #findall函数查询参数是否存在小写
        if match:
            strength_level += 1
        
        num = re.compile('[0-9]+')  #findall函数查询参数是否存在数字
        match = num.findall(yourpassword)
        if match:
            strength_level += 1
    else:
        print('密码设置失败,至少含有8位')
        ScorePassword()
        
    symbol = re.compile('([^a-zA-Z0-9])+')  #findall函数查询参数是否存在特殊字符
    match = symbol.findall(yourpassword)
    if match:
        strength_level += 1
    else:
        strength_level = 0
        print('应至少含有一个特殊字符')
        ScorePassword()
    
    if strength_level <= 2:
        print('密码设置简单,请重试')
        ScorePassword()   #这里可以采用其它方式,我采用的是递归的方法重试
    elif strength_level <=4:
        if input('密码中等强度可使用,是否设置更强密码?(Please input Yes or no)\n') != 'Yes':
            print("恭喜你设置成功\n")
            return yourpassword
        else:
            ScorePassword(input("请你输入更强的密码:"))
    elif strength_level == 5:
        print('恭喜你设置成功,完美密码!\n')
        return yourpassword

其它密码强弱判断方式

方式众多,但是原理大致相同,我再列举几种,大家可供参考、修改,有疑问可以留言,看到必回。
Python字符串:

  • str.isnumeric() ------检测字符串是否只有数字 返回True or False(注意是只有数字)
  • str.isalpha() ------检测字符串中是否只有字母 返回True or False
  • str.islower() ------检测字符串中是否都为小写
  • str.isupper() ------检测字符串中是否都为大写
  • len(str) ------检测字符串长度
  • fs.isdigit() ------检测字符串是否都为数字。
def checkio(s):
    fs = ''.join(filter(str.isalnum, s)) # keep only letters and digits
    return (
            len(fs) >= 1        # There is at least one letter or digit
        and len(s)  >= 10       # ... and there are at least 10 characters
        and not fs.isalpha()    # ... and there is at least one digit
        and not fs.isdigit()    # ... and there is at least one letter
        and not fs.islower()    # ... and not all letters are lowercase
        and not fs.isupper()    # ... and not all letters are uppercase
    )
import re
def checkio(data):
    return True if re.search("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$", data) and len(data) >= 10 else False
 
 
if __name__ == '__main__':

修改值定用户的密码

# 修改用户密码
def ChangeUserPassword():
    path = "aa.csv"
    YourID = input('请输入你想修改密码的用户名:')  #
    YourPassword = input('请输入原密码:')
    r = csv.reader(open(path,newline=""))
    lines = [l for l in r] #将读取的数据转换成列表
#     print(lines.index([YourID,YourPassword]))
    NewIndes = lines.index([YourID,YourPassword]) #列表查找特定的值
    lines[NewIndes][1] = ScorePassword()  #列表索引处修改其值
#     print(lines)
    writer = csv.writer(open(path, 'w',newline=""))  #将修改后的数据重新输入进去csv文件
    writer.writerows(lines)

显示当前所有用户信息

#显示当前所有用户信息
def SelectAllUserInfo():
    path = "aa.csv"
    with open(path,"r+",encoding='utf-8') as f:
        csv_read = csv.reader(f)
        for line in csv_read:
            print(line[0])
        print("\n")

可运行源码

import csv
import re
import pandas as pd
import numpy as np
from pandas.core.frame import DataFrame

global NewID
global PassWord

# 打印功能提示
def printMenu():
    print("************************")
    print("1.创建一个用户ID")
    print("2.修改密码")
    print("3.显示所有用户")
    print("4.创建一个新的CSV文件记录数据")
    print("5.退出系统")
    print("************************")

#打开一个csv文件,若没有则创建,用于存储用户id和密码
def CreateCsvFile(): 
    path = input("请输入新csv文件名——用于记录数据")
    with open(path,'w+',newline="") as f:
        csv_write = csv.writer(f)
        csv_head = ['UserID','PassWord']
        csv_write.writerow(csv_head)
    
# 创建用户ID及密码
def CreateUserID():
    global NewID
    global PassWord
    
    path = "aa.csv"
    NewID = input('请输入你想创建的用户名:')
    data=pd.read_csv(path,sep=',',encoding='utf-8')  #encoding='unicode_escape'    'utf-8'  'GBK'注意区分这几种编码格式
    a=data['UserID'].tolist()
    while True:
        if NewID in a:
            print("用户名已存在,请重新选择\n")
            NewID = input('请重新输入你想创建的用户名:')
        else:
            PassWord = ScorePassword()
            with open(path,'a+',newline="") as f:
                csv_write = csv.writer(f)
                data_row = [NewID,PassWord]
                csv_write.writerow(data_row)
            break
    

#密码评分
def ScorePassword():
    yourpassword = input("请你为该用户设置密码:")
    strength_level = 0
    if len(yourpassword) >= 8:
        strength_level += 1
        if len(yourpassword) >= 8:
            strength_level += 1
            
        upper = re.compile('[A-Z]+')
        match = upper.findall(yourpassword)
        if match:
            strength_level += 1
        
        lower = re.compile('[a-z]+')
        match = lower.findall(yourpassword)
        if match:
            strength_level += 1
        
        num = re.compile('[0-9]+')
        match = num.findall(yourpassword)
        if match:
            strength_level += 1
    else:
        print('密码设置失败,至少含有8位')
        ScorePassword()
        
    symbol = re.compile('([^a-zA-Z0-9])+')
    match = symbol.findall(yourpassword)
    if match:
        strength_level += 1
    else:
        strength_level = 0
        print('应至少含有一个特殊字符')
        ScorePassword()
    
    if strength_level <= 2:
        print('密码设置简单,请重试')
        ScorePassword()
    elif strength_level <=4:
        if input('密码中等强度可使用,是否设置更强密码?(Please input Yes or no)\n') != 'Yes':
            print("恭喜你设置成功\n")
            return yourpassword
        else:
            ScorePassword(input("请你输入更强的密码:"))
    elif strength_level == 5:
        print('恭喜你设置成功,完美密码!\n')
        return yourpassword

# 修改用户密码
def ChangeUserPassword():
    path = "aa.csv"
    YourID = input('请输入你想修改密码的用户名:')  #
    YourPassword = input('请输入原密码:')
    r = csv.reader(open(path,newline=""))
    lines = [l for l in r]
#     print(lines.index([YourID,YourPassword]))
    NewIndes = lines.index([YourID,YourPassword])
    lines[NewIndes][1] = ScorePassword()
#     print(lines)
    writer = csv.writer(open(path, 'w',newline=""))
    writer.writerows(lines)

            
# 显示当前所有用户信息
def SelectAllUserInfo():
    path = "aa.csv"
    with open(path,"r+",encoding='utf-8') as f:
        csv_read = csv.reader(f)
        for line in csv_read:
            print(line[0])
        print("\n")


        
while True:
    printMenu()
    key = input("Enter selection:")
    print("\n")
    if key == '1':
        CreateUserID()
    elif key == '2':
        ChangeUserPassword()
    elif key == "3":
        SelectAllUserInfo()
    elif key == "4":
        CreateCsvFile()
    elif key == "5":
        break
    else:
        print("请输入1-5选项\n")

系统如何进一步完善

  1. 开发GUI,可使用pyqt5或者其它
  2. 密码判断函数可以更加简便
  3. 记录并显示增加、修改数据的操作时间的功能
  4. 增加删除值定用户名的功能

大家加油学习啊!男儿当自强!

你可能感兴趣的:(python)