内容回顾

  • 字典内置方法

    1. 1.类型转换 dict()
    2. 2.重要操作
    3. get()
    4. d[key] = values 常用
    5. pop()
    6. update() 键存在则修改键值对 键不存在则新增键值对
    7. fromkeys()
    8. ps:字典内键值对默认是无序的
  • 元组内置方法

    1. 1.类型转换 set()
    2. 2.重要操作
    3. 去重
    4. 关系运算
    5. ps:集合内数据值也是无序的
  • 字符编码理论

    1. 主要针对文本文件
    2. 字符编码>>>:内部记录了人类的字符与数字的对应关系
    3. 字符编码发展史
    4. ASCII
    5. A-Z 65-90
    6. a-z 97-122
    7. GBKshift_JISEuc_Kr
    8. unicofeutf家族(utf8 utf16 utf32)
    9. ps:英文字符采用一个字节 中文字符采用三个字节甚至更多
  • 字符编码实操

    1. 1.解决文本文件乱码的核心就是当初什么编码存的就以什么编码取
    2. 2.编码与解码
    3. 编码:人类字符>>>计算机字符
    4. encode()
    5. 解码:计算机字符>>>人类字符
    6. decode()
    7. ps:在pythonbytes类型可以看成是二进制b'’
    8. 3.python解释器差异
    9. 文件头: # encoding:utf8
    10. 字符串:u''

    内容概要

  • 文件操作

    1. 利用python代码的编写来读写文件
    2. 1.文件的概念
    3. 2.文件的操作方式
    4. 3.文件读写模式
    5. 4.文件操作模式
    6. 5.文件诸多方法
    7. 6.文件内容修改
    8. 7.文件光标移动

作业讲解

  1. 1.优化员工管理系统
  2. 拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)
  3. 员工的信息有:用户名 年龄 岗位 薪资...
  4. 员工管理系统:注册、查看(单个员工、所有员工)、修改薪资、删除员工
  5. 2.去重下列列表并保留数据值原来的顺序
  6. eg: [1,2,3,2,1] 去重之后 [1,2,3]
  7. l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
  8. 3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  9.   pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
  10.   linuxs={'kermit','tony','gangdan'}
  11.   1. 求出即报名python又报名linux课程的学员名字集合
  12.   2. 求出所有报名的学生名字集合
  13.   3. 求出只报名python课程的学员名字
  14.   4. 求出没有同时这两门课程的学员名字集合
  15. 4.统计列表中每个数据值出现的次数并组织成字典战士
  16. eg: l1 = ['jason','jason','kevin','oscar']
  17. 结果:{'jason':2,'kevin':1,'oscar':1}
  18. 真实数据
  19. l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
  20. # 2.定义一个存储所有员工信息的字典
  21. # user_data_dict = {} # {'编号':用户字典, '编号':用户字典}
  22. '''
  23. 数据存储的方式1
  24. {
  25. 'jason':[18, 'teacher', 10],
  26. 'kevin':[28, 'sale', 90]
  27. }
  28. 数据存储的方式2
  29. {
  30. 'jason':{'age':18, 'job':'teacher', 'salary':8000},
  31. 'kevin':{'age':28, 'job':'sale', 'salary':9000}
  32. }
  33. 数据存储的方式3
  34. {
  35. '1':{'name':'jason','age':18, 'job':'teacher', 'salary':8000},
  36. '2':{'name':'kevin','age':28, 'job':'sale', 'salary':9000},
  37. '3':{'name':'jason','age':18, 'job':'teacher', 'salary':8000},
  38. }
  39. '''
  40. # 1.先搭建系统骨架
  41. # while True:
  42. # print("""
  43. # 1.创建员工信息
  44. # 2.查看单个员工
  45. # 3.查看所有员工
  46. # 4.修改员工薪资
  47. # 5.删除员工信息
  48. # """)
  49. # choice = input('请选择您想要执行的功能编号>>>:').strip()
  50. # if choice == '1':
  51. # while True:
  52. # # 1.获取员工编号
  53. # emp_id = input('请输入该员工的员工编号(q)>>>:').strip()
  54. # if emp_id == 'q':
  55. # break
  56. # # 判断编号是否是纯数字
  57. # if not emp_id.isdigit():
  58. # print('员工编号必须是纯数字')
  59. # continue
  60. # # 2.判断员工编号是否已存在
  61. # if emp_id in user_data_dict:
  62. # print('员工编号已存在 请重新录入')
  63. # continue
  64. # # 3.获取员工详细信息
  65. # username = input('请输入员工姓名>>>:').strip()
  66. # age = input('请输入员工年龄>>>:').strip()
  67. # job = input('请输入员工岗位>>>:').strip()
  68. # salary = input('请输入员工薪资>>>:').strip()
  69. # # 4.构建一个临时的小字典
  70. # temp_dict = {}
  71. # # 5.添加员工信息键值对
  72. # temp_dict['emp_id'] = emp_id
  73. # temp_dict['name'] = username
  74. # temp_dict['age'] = age
  75. # temp_dict['job'] = job
  76. # temp_dict['salary'] = salary
  77. # # 6.添加到大字典中
  78. # user_data_dict[emp_id] = temp_dict
  79. # print(f'员工{username}添加成功')
  80. # elif choice == '2':
  81. # while True:
  82. # # 1.先获取员工编号
  83. # target_id = input('请输入您想要查看的员工编号(q)>>>:').strip()
  84. # if target_id == 'q':
  85. # break
  86. # # 2.判断员工编号是否不存在
  87. # if target_id not in user_data_dict:
  88. # print('员工编号不存在 无法查看')
  89. # continue
  90. # # 3.根据员工编号获取员工字典数据
  91. # user_dict = user_data_dict.get(target_id)
  92. # # 4.格式化输出
  93. # print(f"""
  94. # --------------info of emp-------------------
  95. # 编号:{user_dict.get('emp_id')}
  96. # 姓名:{user_dict.get('name')}
  97. # 年龄:{user_dict.get('age')}
  98. # 岗位:{user_dict.get('job')}
  99. # 薪资:{user_dict.get('salary')}
  100. # --------------------------------------------
  101. # """)
  102. # elif choice == '3':
  103. # for user_dict in user_data_dict.values():
  104. # print(f"""
  105. # --------------info of emp-------------------
  106. # 编号:{user_dict.get('emp_id')}
  107. # 姓名:{user_dict.get('name')}
  108. # 年龄:{user_dict.get('age')}
  109. # 岗位:{user_dict.get('job')}
  110. # 薪资:{user_dict.get('salary')}
  111. # --------------------------------------------
  112. # """)
  113. # elif choice == '4':
  114. # while True:
  115. # # 1.先获取想要修改的员工编号
  116. # target_id = input('请输入您想要修改的员工编号(q)>>>:').strip()
  117. # if target_id == 'q':
  118. # break
  119. # if target_id not in user_data_dict:
  120. # print('员工编号不存在')
  121. # continue
  122. # # 2.获取新的薪资
  123. # new_salary = input('请输入该员工的新薪资待遇>>>:').strip()
  124. # if not new_salary.isdigit():
  125. # print('薪资只能是纯数字')
  126. # continue
  127. # # 3.获取员工字典
  128. # user_dict = user_data_dict.get(target_id) # {'salary':123}
  129. # # 4.修改字典中的薪资
  130. # user_dict['salary'] = new_salary # {'salary': 321}
  131. # # 5.修改大字典
  132. # user_data_dict[target_id] = user_dict
  133. # print(user_data_dict.get(target_id))
  134. # elif choice == '5':
  135. # while True:
  136. # # 1.先获取想要修改的员工编号
  137. # target_id = input('请输入您想要删除的员工编号(q)>>>:').strip()
  138. # if target_id == 'q':
  139. # break
  140. # if target_id not in user_data_dict:
  141. # print('员工编号不存在')
  142. # continue
  143. # # 2.字典删除键值对
  144. # user_data_dict.pop(target_id)
  145. # else:
  146. # print('抱歉 暂无该功能编号!!!')
  147. # 2.去重下列列表并保留数据值原来的顺序
  148. # eg: [1,2,3,2,1] 去重之后 [1,2,3]
  149. # l1 = [2, 3, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 5, 6, 5]
  150. # 不考虑顺序的情况下 去重
  151. # s1 = set(l1)
  152. # l2 = list(s1)
  153. # print(l2)
  154. # 考虑顺序
  155. # new_list = []
  156. # for i in l1:
  157. # if i not in new_list:
  158. # new_list.append(i)
  159. # print(new_list)
  160. # 3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  161. #   pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
  162. #   linuxs={'kermit','tony','gangdan'}
  163. #   1. 求出即报名python又报名linux课程的学员名字集合
  164. #   2. 求出所有报名的学生名字集合
  165. #   3. 求出只报名python课程的学员名字
  166. #   4. 求出没有同时这两门课程的学员名字集合
  167. # pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
  168. # linuxs = {'kermit', 'tony', 'gangdan'}
  169. # print(pythons & linuxs)
  170. # print(pythons | linuxs)
  171. # print(pythons - linuxs)
  172. # print(pythons ^ linuxs)
  173. # 4.统计列表中每个数据值出现的次数并组织成字典展示
  174. # eg: l1 = ['jason','jason','kevin','oscar']
  175. # 结果:{'jason':2,'kevin':1,'oscar':1}
  176. # 真实数据
  177. l1 = ['jason', 'jason', 'kevin', 'oscar', 'kevin', 'tony', 'kevin']
  178. # 1.先定义结果集空字典
  179. data_dict = {}
  180. # 2.循环列表中每一个数据值
  181. for name in l1: # 'jason' 'kevin'
  182. # 3.判断当前数据值是否在字典的k中
  183. if name not in data_dict: # {'jason':1}
  184. data_dict[name] = 1
  185. else:
  186. data_dict[name] += 1
  187. # data_dict[name] = data_dict.get(name) + 1
  188. print(data_dict)

正文来了

文件操作

  1. 1.文件的概念
  2. 就是操作系统暴露给用户操作硬盘的快捷方式
  3. eg:双击一个文件其实就是从硬盘将数据加载到内存
  4. ctrl+s保存文件 其实是将内存中的数据刷到硬盘保存
  5. 2.代码打开文件的两种方式
  6. 方式1:
  7. f = open(文件路径,读写模式,encoding='utf8')
  8. f.close()
  9. 方式2:
  10. with open('a.txt','r',encoding='utf8')as f1:
  11. with子代码块
  12. ps:with上下文管理好处在于子代码运行结束自动调用close方式关闭资源
  13. """
  14. open方法的第一个参数是文件路径 并且撬棍跟一些字母的组合会产生特殊的含义导致路径查找混乱 为了解决该问题可以在字符串的路径前面加字母r
  15. D:\a\n\t
  16. r'D:\a\n\t'
  17. 以后涉及到路径的编写 推荐加上r
  18. with支持一次性打开多个文件
  19. with open() as f1,open()as f2,open()asf3:
  20. 子代码
  21. """

文件的读写模式

  1. 'r' 只读模式:只能读不能写
  2. # 1.文件路径不存在:会直接报错
  3. # with open(r'b.txt', 'r', encoding='utf8')as f:
  4. # print(f.read())
  5. # 2.文件路径存在: 正常读取文件内容
  6. # with open(r'a.txt', 'r', encoding='utf8')as f:
  7. # print(f.read())
  8. 'w' 只写模式:只能写不能看
  9. # 1.文件路径不存在:自动创建
  10. # with open(r'b.txt', 'w', encoding='utf8') as f:
  11. # pass
  12. # 2. 文件路径存在:先清空文件内容 之后再写入
  13. with open(r'a.txt', 'w', encoding='utf8') as f:
  14. f.write('假期综合征 赶紧要调整\n')
  15. f.write('假期综合征 赶紧要调整\n')
  16. f.write('假期综合征 赶紧要调整\n')
  17. """强调:换行符需要自己添加 并且再后续数据读取比对的时候也一定要注意它的存在
  18. """
  19. 'a' 只追加模式:文件末尾添加数据
  20. # 1.文件路径不存在:自动创建
  21. # with open(r'c.txt', 'a', encoding='utf8') as f:
  22. # pass
  23. # 2. 文件路径存在:自动在末尾等待追加内容
  24. with open(r'a.txt', 'a', encoding='utf8') as f:
  25. f.write('放假七天和上班七天感觉是完全不一样的')
  26. """
  27. 当我们在编写代码的时候 有些部分不知道写什么具体代码 但是也不能空着不写
  28. 这个时候可以使用关键字
  29. pass
  30. ...
  31. 只补全语法不执行功能 本身没有任何的含义
  32. """

文件操作模式

  1. t 文本模式
  2. 默认的模式 我们上面所写的 r w a 其实全称是rt wt at
  3. 1.只能操作文本文件
  4. 2.读写都是以字符为单位
  5. 3.需要指定encoding参数 如果不知道则会采用计算机默认的编码
  6. b 二进制模式(bytes模式)
  7. 不是默认的模式 需要自己指定 rb wb ab
  8. 1.可以操作任意类型的文件
  9. 2.读写都是以bytes为单位
  10. 3.不需要指定encoding参数 因为它已经是二进制模式了 不需要编码
  11. 二进制模式与文本模式针对文件路径是否存在的情况下 规律是一样的!!!

文件诸多方法

  1. 1.read()
  2. 一次性读取文件内容 并且光标停留在文件末尾 继续读取则没有内容
  3. 并且当文件内容比较多的时候 该方法还可能会造成计算机内存溢出
  4. 括号还可以填写数字 在文本模式下 表示读取几个字符
  5. 2.for 循环
  6. 一行行读取文件内容 避免内存溢出现象的产生
  7. 3.readline()
  8. 一次只读一行内容
  9. 4.readlines()
  10. 一次性读取文件内容 会按照行数组织成类列表的一个个数据值
  11. 5.readable()
  12. 判断文件是否具备读数据的能力
  13. 6.write()
  14. 写入数据
  15. 7.writeable()
  16. 判断文件是否具备写数据的能力
  17. 8.writelines()
  18. 接收一个列表 一次性将列表中所有的数据值写入
  19. 9.flush()
  20. 将内存中文件数据立刻刷到硬盘 等价于ctrl+s

文件内光标的移动

  1. with open(r'a.txt', 'rb') as f:
  2. print(f.read())
  3. f.seek(0,0)
  4. print(f.read())
  5. f.seek(0, 0)
  6. print(f.read())
  7. # print(f.read(2).decode('utf8'))
  8. # f.seek(-1, 2)
  9. # print(f.tell()) # 返回光标距离文件开头产生的字节数
  10. """
  11. seek(offset, whence)
  12. offset是位移量 以字节为单位
  13. whence是模式 0 1 2
  14. 0是基于文件开头
  15. 文本和二进制模式都可以使用
  16. 1是基于当前位置
  17. 只有二进制模式可以使用
  18. 2是基于文件末尾
  19. 只有二进制模式可以使用
  20. """
  21. # print(f.read(3).decode('utf8'))

文件内光标的移动案例(了解)

  1. import time
  2. with open(r'a.txt', 'rb') as f:
  3. f.seek(0, 2)
  4. while True:
  5. line = f.readline()
  6. if len(line) == 0:
  7. # 没有内容
  8. time.sleep(0.5)
  9. else:
  10. print(line.decode('utf8'), end='')

计算机硬盘修改数据的原理(了解)

  1. 硬盘写数据可以看成是在硬盘上刻字 一旦需要修改中间内容 则需要重新刻字
  2. 因为刻过的字不可能从中间再分开
  3. 硬盘删除数据的原理
  4. 不是直接删除而是改变状态 等待后续数据的覆盖才会被真正删除

文件内容修改(了解)

  1. # 修改文件内容的方式1:覆盖写
  2. # with open(r'a.txt', 'r',encoding='utf8')as f:
  3. # data = f.read()
  4. # with open(r'a.txt', 'w', encoding='utf8')as f1:
  5. # f1.write(data.replace('哈哈','嘿嘿'))
  6. # 修改文件内容的方式2:换地方写
  7. '''
  8. 先在另外一个地方写入内容 然后将源文件删除 将新文件命名成源文件
  9. '''
  10. import os
  11. with open('a.txt', 'r', encoding='utf8') as read_f, \
  12. open('.a.txt.swap', 'w', encoding='utf-8') as write_f:
  13. for line in read_f:
  14. write_f.write(line.replace('小明', 'kevinSB'))
  15. os.remove('a.txt') # 删除a.txt
  16. os.rename('.a.txt.swap', 'a.txt') # 重命名文件

python进阶之路9文件的处理方法的更多相关文章

  1. python进阶之路之文件处理

    Python之文件处理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  2. Python学习之路4 - 文件操作&编码转换

    文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式, ...

  3. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

  4. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  5. Python进阶之路---1.4python数据类型-数字

    python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print     print('hello,python')   1.1pyt ...

  6. Python进阶之路---1.1python简介

                            Python简介 Python简介 Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释 ...

  7. python进阶--打包为exe文件

    一.Python打包为EXE文件有不少方案,比较常用的有下面两种方式: 1.使用py2exe 详细介绍:http://www.cnblogs.com/jans2002/archive/2006/09/ ...

  8. python成长之路五-文件操作

    1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...

  9. python爬虫之路——基本文件操作

    介绍python如何打开文件和读取数据 新建TXT文档,为追加模式: f=open('c;/wendang/demo.txt','a+') content="abcdefg123456789 ...

  10. Python学习之路5☞文件处理

    一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 正趣果上果 Interesting fruit fruit 词:郭婞 曲:陈粒 编曲/混音/和声:燕池 萧: ...

随机推荐

  1. 华为设备配置和使用FTP服务命令

    配置SFTP Server与Client server:aaa 进入aaa视图 local-user huawei2 password cipher huawei2 设置用户名和密码 local-us ...

  2. 生产系统CPU飙高问题排查

    现状 生产系统CPU占用过高,并且进行了报警 排查方法 执行top命令,查看是那个进程导致的,可以确定是pid为22168的java应用导致的 执行top -Hp命令,查看这个进程的那个线程导致cpu ...

  3. ciscn 2022 misc 部分wp

    ​ 目录 everlasting_night ez_usb everlasting_night 提示是注意png数据块 然后注意图片通道数据可以用来lsb解码 下载是一张图片,尝试几种方法之后没有太大 ...

  4. 后端框架的学习----mybatis框架(3、配置解析)

    3.配置解析 1.核心配置文件 2.环境配置(environment) 3.属性(properties) 可以通过properties属性来实现引用配置文件 这些属性可以在外部进行配置,并可以进行动态 ...

  5. LeetCode------递归(爬楼梯)

    1.递归 1.一个问题的解可以分解为几个子问题的解. 2.这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 3.存在基线/终止条件 来源:力扣(LeetCode) 链接:https:// ...

  6. python django搭建一个简易博客的解析(按照文件顺序逐一讲解)

    上次讲解了一下各py文件的内容,但比较乱,所以这次整理了一个顺序版. 源代码请在http://github/Cheng0829/mysite自行下载 mysite: db.sqlite3:数据库文件. ...

  7. 6.pygame-搭建主程序

    职责明确 新建plane_main.py 封装主游戏类 创建游戏对象 启动游戏   新建plane_sprites.py 封装游戏中所有需要使用的精灵子类 提供游戏的相关工具 #plane_sprit ...

  8. MySQL的下载、安装、配置

    下载 官方下载地址:下载地址: 找到免费社区版本 进入到下面页面的时候,下载对应的MySQL,我这里选择Windows. 点击Download ,如下图: 后面他会提示你登录注册啥的,我们选择不需要, ...

  9. android_studio 使用

    android studio安装 目前使用: android studio 4.1.3 Zip免安装版:android-studio-ide-201.7199119-windows413.zip an ...

  10. JS数据结构与算法-数组结构

    数组结构 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构. 数组通常情况下用于存储一系列同一种数据类型的值. 但在JavaScript里,也可以在数组中保存不同类型的值. 但我们 ...