Python基础06

本篇博客

1 文件

1.1 二进制模式和文本模式
1.2 文件读写,追加
1.3 文件读写方法
1.4 文件拷贝
1.5 文件和目录操作

2 集合

2.1 创建集合
2.2 集合添加元素
2.3 集合删除元素
2.4 集合遍历
2.5 集合交集和并集
2.6 小例子: 统计字符个数
2.7 小结(集合是补充的)

3.员工管理系统

3.1 思路分析
3.2 搭建框架
3.3 各功能完整实现

博客内容正式开始啦。。。

1 文件

从文件读取数据到程序中, 并且从程序中将数据存储到文件, 叫做文件输入和输出

文件的多种访问模式:下面主要讲:r,w,a,知道rb ,wb, ab

1.1 二进制模式和文本模式

Python文件打开模式分为2种:

文本模式:普通txt等文本文件,可以用文本模式打开读写操作。w:写  r:读  a:追加

二进制模式:图片,视屏等格式,用二进制模式打开读写操作。加‘b’就是二进制模式   wb:二进制写   rb:二进制读  ab:二进制追加

文本模式的区别:

文本模式会进行换行符的转换,二进制模式不会进行换行符的转换。

例:各操作系统下换行符的区别

  • windows   
  • linux           
  • mac           

程序中的换行符是:

1.2 文件读写,追加

open() 函数

你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。如果该文件无法被打开,会抛出 OSError。

open(file, mode='r')

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,默认文件打开模式,

注意使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

f.close() 关闭文件,必须要关闭文件。因为文件打开的数量有限,用好要即使关闭。

f = open('a.txt','r')
f.close()

'r' :以只读方式打开文件(默认)

# 2 读取文件
fb = open('b.txt','r')
# read 函数默认读取文件中所有的数据
my_content = fb.read()
fb.close()

print(my_content)

'w' :以写入的方式打开文件,会覆盖已存在的文件,文件不存在会创建

# 使用open函数打开一个文件
fa = open('a.txt','w')

my_content = 'hello world 
第一写入文件'
fa.write(my_content)

# 关闭文件
fa.close()

'a' 以写入模式打开,如果文件存在,则在末尾追加写入

f = open('a.txt', 'a')
f.write('
hello world!')
f.close() 

1.3 文件读写方法

写操作方法:write   writelines

f.write(str): 将字符串str写入文件
f.writelines(seq): 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

"""1. write 函数用法"""

f = open('a.txt', 'w')

# write 函数一次写一行
# f.write('hello world')

# writelines 一次可以写多行,参数是一个列表,列表每个元素都是一行数据,如果没有换行,是因为没写换行符。
lines = ['aaa
', 'bbb
', 'ccc
']
f.writelines(lines)

f.close()

读操作方法: read  readline readlines

f.read([size=-1]) :从文件读取指定的字节数,如果未给定或为负则读取所有
f.readline(): 一次读取一行数据
f.readlines:一次读取所有行数据,读取所有行并返回列表

f.read():从文件读取指定的字节数,如果未给定或为负则读取所有

# read 没有指定参数,则读取文件中的所有数据
# read 指定参数,则读取参数指定个数的数据
f = open('a.txt','r')
content = f.read(2)
# content = f.read()
f.close()
print(content)

read 没有指定参数,则读取文件中的所有数据
read 指定参数,则读取参数指定个数的数据

f.readline():一次读取一行数据

"""一次读取一行数据"""
f = open('a.txt','r')
content = f.readline()
content2 = f.readline()
print(content)
print(content2)
f.close()

f.readlines():一次读取所有行数据,读取所有行并返回列表

"""一次读取所有行数据"""
f = open('a.txt','r')
content = f.readlines()
print(content)
f.close()
 

小例子:使用readlines ,打印也如下,换行打印。

"""一次读取所有行数据"""
f = open('a.txt','r')

lines = f.readlines()
print(lines)
for line in lines:
    if line[-1] == '
':
        print(line[:-1])
    else:
        print(line)

f.close()

1.4 文件拷贝

小例子:输入要拷贝的文件名,进行复制一份,改个名字存储。

old_file_name = input('请输入要拷贝的文件名字:')
new_file_name = old_file_name + '.bk'
f_old = open(old_file_name,'rb')
f_new = open(new_file_name,'wb')
content = f_old.read()
f_new.write(content)
f_old.close()
f_new.close()

1.5 文件和目录操作

文件重命名:rename()方法
rename()方法需要两个参数,当前的文件名和新文件名。

import os
"""文件重命名"""
os.rename('b.txt.bk','12.txt')

删除:文件删除(remove),文件夹删除(rmdir)

import os

"""文件和文件夹删除"""
# 如果只写文件名,默认只在当前目录下找文件,如果找不到就报错
# 都可以指定路径删除
os.remove('C:/Users/Administrator/Desktop/zyc123.txt')
# os.rmdir('C:/Users/Administrator/Desktop/gaoweiguang')

创建目录:mkdir

import os

"""创建目录"""
os.mkdir('biji')
# os.rmdir('biji')  # 删除目录

获得指定目录下的文件列表:listdir

import os

"""获得指定目录下的文件列表"""
content = os.listdir()
print(content)

获得工作目录:getcwd     设置工作目录:chdir

import os

"""获得和设置工作目录"""
cwd = os.getcwd()
# print(cwd) # F:2020软件测试heima软件测试----百老汇整理----python代码day6

os.chdir('C:/Users/Administrator/Desktop')
os.mkdir('gaoweiguang')

2 集合

set集合是一个无序不重复元素集。由于set是一个无序集合,set并不记录元素位置,所以不支持下标操作和切片操作.

2.1 创建集合

# 1. 创建一个空的set集合
my_set = set()
# 2. 创建一个包含元素的集合
my_set = {10, 20, 30, 40}
print(my_set)
# 3. 用一个容器来创建集合
# 注意:set会剔除重复元素
my_set = set([1, 2, 3, 4, 5, 5])
print(my_set)
# 4. 创建一个唯一元素的字符集合
my_set = set("hello world!")
print(my_set)

2.2 集合添加元素

向set集合中添加元素,可以使用add()函数和update()函数,add()可以一次添加一个元素,update()函数可以一次添加多个元素

# 创建一个空的集合
my_set = set()
# add()函数向set中添加元素
my_set.add(10)
my_set.add(20)
my_set.add(30)
# 打印set集合
print(my_set)
# update()函数添加多个元素
my_set.update([60, 40, 80, 90])
my_set.update((160, 140, 180, 190))
my_set.update("hello")
# 如果添加的元素是一个字典,那么将字典的key添加到集合中
# my_set.update({"name": "smith", "age": 1030})
print(my_set)

2.3 集合删除元素

my_set = set([9, 2, 3, 4, 7])
# 删除任意一个元素
my_set.pop()
print(my_set)
# 删除指定元素
my_set.remove(4)
print(my_set)
# 删除元素
my_set.discard(3)
print(my_set)

2.4 集合遍历

# 创建一个空的集合
my_set = set([1, 2, 3, 4])
# 遍历set集合
for value in my_set:
    print(value, end="|")

2.5 集合交集和并集

my_set1 = set([1, 2, 3, 4, 5])
my_set2 = set([3, 4, 5, 6, 7])
# 1. 求两个集合的并集
new_set1 = my_set1.union(my_set2)
# 或者
new_set2 = my_set1 | my_set2
print(new_set1)
print(new_set2)
# 2. 求两个集合的交集
new_set3 = my_set1.intersection(my_set2)
# 或者
new_set4 = my_set1 & my_set2
print(new_set3)
print(new_set4)

2.6 小例子: 统计字符个数

# 统计字符串中字符的个数
my_string = input("请输入任意字符串:")
# 先对字符串去重
new_string = set(my_string)
# 字典记录字符出现次数
my_count = {}
# 遍历new_string
for ch in new_string:
    my_count[ch] = my_string.count(ch)
# 输出结果
print(my_count)

2.7 小结

1. 集合使用一对花括号定义, 每一个元素是任意类型的对象, 不是键值对.
2. 集合不支持切片、索引操作.
3. 集合中的元素唯一且不重复.
4. 集合支持 for 循环遍历.
5. 集合的 add 方法可以向集合中添加一个元素.
6. 集合的 update 方法可以向集合中添加一个容器的元素.
7. 集合的 pop 方法删除set集合中的任意一个元素,如果set集合为空,会抛出KeyError错误.
8. 集合的 remove 方法从集合中删除一个元素, 如果元素不存在, 会抛出KeyError错误.
9. 集合的 discard 方法删除集合中的一个元素, 如果不存在, 则不做任何事.
10. 集合的 union 方法可以返回两个集合的并集.
11. 集合的 intersection 方法可以返回两个集合的交集.

3.员工管理系统

3.1 思路分析

员工管理系统可依据职责不同分为3部分:
1. 数据存储
2. 业务实现
3. 数据呈现

使用字典 employee = {'1001': {'name': 'Obama', 'salary': 10000, 'sex': '男'}, '1002': ['name': 'Trump', 'salary': 12000, 'sex' : '男']}的理由如下:

1. 使用元组的话, 会导致数据无法修改, 不能达到我们的预期, 所以这个方案被否决.

2. 使用列表的话, 可以实现我们的要求, 但是相较于字典的话, 操作列表中的元素就必须知道列表中名字在第几个 索引、年龄在第几个索引、性别在第几个索引, 并且在实现代码中通过索引获取相应的姓名、年龄、性别等数 据可读性较差.

最终我字典嵌套字典的存储结构.

3.2 搭建框架

# coding=utf-8

# 存储员工信息
employee = {}
def show_menu():
# 显示菜单系统
    pass

def add_new_info():
# 添加新的员工
    pass

def remove_info():
# 删除员工信息
    pass

def show_all_info():
# 打印所有员工信息
    pass

def edit_info():
# 修改员工信息
    pass

def main():
    while True:
        # 1. 打印菜单
        show_menu()

        # 2. 等待用户输入
        user_operate = input('请输入您的操作:')

        # 3. 根据用户选择做相应的事情
        if user_operate == '1':
            add_new_info()
        elif user_operate == '2':
            remove_info()
        elif user_operate == '3':
            edit_info()
        elif user_operate == '4':
            show_all_info()
        elif user_operate == '5':
            print('欢迎再次使用本系统!')
            break
        else:
            print('您的输入有误, 请重新输入!')
main()

3.3 各功能实现

显示菜单:

def show_menu():
    print("*" * 30)
    print("员工管理系统 v1.0")
    print(" 1:添加员工信息")
    print(" 2:删除员工信息")
    print(" 3:修改员工信息")
    print(" 4:显示所有信息")
    print(" 5:退出员工系统")
    print("*" * 30)

新增员工功能业务逻辑:
1. 获得输入的员工信息.
2. 将员工信息依据 "键:值" 存储到字典中, 每个字典表示一个员工的完整信息.
3. 以员工编号为键, 员工信息为值, 将员工信息存储到 employee 字典中.

def add_yuangong():

    # 1 员工编号,员工姓名,员工的性别,员工的工资
    yuangong_id  = input('请输入员工编号:')
    # 1.1 判断员工信息是否存在,存在,拒绝添加
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id in yuangong_all_id:
        print('员工编号重复,添加信息失败')
        return
    # 1.2 如果不存在就进行下面的操作
    yuangong_name = input('请输入员工姓名:')
    yuangong_gender = input('请输入员工性别:')
    yuangong_salary = input('请输入员工工资:')
    # 2 将员工信息加入到字典中
    # 2.1 编号作为键,剩下信息作为值
    yuangong_info = {'name':yuangong_name,'gender':yuangong_gender,'salary':yuangong_salary}
    # 2.2 '1001':{'name':'xxx','age':18,'salary':20000}
    yuangongs[yuangong_id] = yuangong_info
    print('员工%s信息添加成功'%yuangong_name)

删除员工功能业务逻辑:
我们删除员工信息, 根据员工的编号来删除, 实现思路如下:
1. 获得要删除的员工编号.
2. 判断员工编号是否存在, 如果不存在则终止函数执行.
3. 如果员工信息存在, 则根据键删除员工信息.

def remove_yuangong():

    # 1 获取要删除的员工编号
    yuangong_id = input('请输入员工编号:')

    # 2 判断员工编号是否存在,不存在,拒绝删除
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id not in yuangong_all_id:
        print('员工编号不存在,删除信息失败')
        return

    # 3 员工编号存在,删除员工信息
    del yuangongs[yuangong_id]
    print('员工信息%s删除成功'%yuangong_id)

修改员工功能业务逻辑:
我们根据员工编号, 修改该员工的信息, 具体思路如下:
1. 获得要修改的员工编号.
2. 判断员工编号是否存在, 如果不存在则终止修改函数执行.
3. 首先显示员工的对应信息, 并提示用户输入修改之后的值:
3.1 如果直接回车, 表示用户无任何输入, 则表示不修改.
3.2 如果用户输入值, 则将对应信息修改为新输入的值

def edit_yuangong():
    # 1 拿到要修改的员工编号
    yuangong_id = input('请输入员工编号:')

    # 1.1 如果不存在,提示错误信息,并且终止程序的运行
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id not in yuangong_all_id:
        print('员工编号不存在,修改失败')
        return

    # 1.2 如果存在,则修改对应信息
    # 1.2.1 显示原来的信息再修改
    new_yuangong_name = input('姓名是%s,你要修改的名字为:'%yuangongs[yuangong_id]['name'])
    new_yuangong_gender = input('性别是%s,你要修改的性别为:'%yuangongs[yuangong_id]['gender'])
    new_yuangong_salary = input('工资是%s,你要修改的工资为:'%yuangongs[yuangong_id]['salary'])

    # 如果用户直接回车,表示没有任何输入,则不更新
    if new_yuangong_name != '':
        yuangongs[yuangong_id]['name'] = new_yuangong_name

    if new_yuangong_gender!= '':
        yuangongs[yuangong_id]['gender'] = new_yuangong_gender

    if new_yuangong_salary != '':
        yuangongs[yuangong_id]['salary'] = new_yuangong_salary

    print('员工编号%s信息修改成功'%yuangong_id)

显示员工功能业务逻辑:
直接遍历 employee 字典, 注意字典中存储的每一个元素都是一个键, 键为员工编号, 值为字典类型, 存储的是员工的
信息.

def show_yuangong():

    # {'1001':{'name':'xxx','age':18,'salary':20000},'1002':{'name':'xxx','age':18,'salary':20000}}

    for yuangong in yuangongs.items():
        print('%s		%s		%s		%s'%(yuangong[0],yuangong[1]['name'],yuangong[1]['gender'],yuangong[1]['salary']))

完整代码:

# 存储所有员工信息
yuangongs ={}

def show_menu():
    print("*" * 30)
    print("员工管理系统 v1.0")
    print(" 1:添加员工信息")
    print(" 2:删除员工信息")
    print(" 3:修改员工信息")
    print(" 4:显示所有信息")
    print(" 5:退出员工系统")
    print("*" * 30)


def add_yuangong():

    # 1 员工编号,员工姓名,员工的性别,员工的工资
    yuangong_id  = input('请输入员工编号:')
    # 1.1 判断员工信息是否存在,存在,拒绝添加
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id in yuangong_all_id:
        print('员工编号重复,添加信息失败')
        return
    # 1.2 如果不存在就进行下面的操作
    yuangong_name = input('请输入员工姓名:')
    yuangong_gender = input('请输入员工性别:')
    yuangong_salary = input('请输入员工工资:')
    # 2 将员工信息加入到字典中
    # 2.1 编号作为键,剩下信息作为值
    yuangong_info = {'name':yuangong_name,'gender':yuangong_gender,'salary':yuangong_salary}
    # 2.2 '1001':{'name':'xxx','age':18,'salary':20000}
    yuangongs[yuangong_id] = yuangong_info
    print('员工%s信息添加成功'%yuangong_name)

def remove_yuangong():

    # 1 获取要删除的员工编号
    yuangong_id = input('请输入员工编号:')

    # 2 判断员工编号是否存在,不存在,拒绝删除
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id not in yuangong_all_id:
        print('员工编号不存在,删除信息失败')
        return

    # 3 员工编号存在,删除员工信息
    del yuangongs[yuangong_id]
    print('员工信息%s删除成功'%yuangong_id)

def show_yuangong():

    # {'1001':{'name':'xxx','age':18,'salary':20000},'1002':{'name':'xxx','age':18,'salary':20000}}

    for yuangong in yuangongs.items():
        print('%s		%s		%s		%s'%(yuangong[0],yuangong[1]['name'],yuangong[1]['gender'],yuangong[1]['salary']))

def edit_yuangong():
    # 1 拿到要修改的员工编号
    yuangong_id = input('请输入员工编号:')

    # 1.1 如果不存在,提示错误信息,并且终止程序的运行
    yuangong_all_id = list(yuangongs.keys())
    if yuangong_id not in yuangong_all_id:
        print('员工编号不存在,修改失败')
        return

    # 1.2 如果存在,则修改对应信息
    # 1.2.1 显示原来的信息再修改
    new_yuangong_name = input('姓名是%s,你要修改的名字为:'%yuangongs[yuangong_id]['name'])
    new_yuangong_gender = input('性别是%s,你要修改的性别为:'%yuangongs[yuangong_id]['gender'])
    new_yuangong_salary = input('工资是%s,你要修改的工资为:'%yuangongs[yuangong_id]['salary'])

    # 如果用户直接回车,表示没有任何输入,则不更新
    if new_yuangong_name != '':
        yuangongs[yuangong_id]['name'] = new_yuangong_name

    if new_yuangong_gender!= '':
        yuangongs[yuangong_id]['gender'] = new_yuangong_gender

    if new_yuangong_salary != '':
        yuangongs[yuangong_id]['salary'] = new_yuangong_salary

    print('员工编号%s信息修改成功'%yuangong_id)



while True:

    show_menu()

    input_num = input('请输入操作系统编号:')

    if input_num == '1':
        add_yuangong()


    elif input_num == '2':
        remove_yuangong()

    elif input_num == '3':
        edit_yuangong()

    elif input_num == '4':
        show_yuangong()

    elif input_num == '5':
        print('退出员工管理系统')
        break

    else:
        print('输入有误')
原文地址:https://www.cnblogs.com/zhangyangcheng/p/12441387.html