字符编码和Python代码操作文件

读写模式之a模式

  1. # a模式 只追加模式
  2. # 路径不存在:自动创建
  3. with open(r'a.txt','a',encoding='utf8') as f:
  4. pass
  5. # 路径存在:不会清空文件 在文件末尾添加内容
  6. with open(r'a.txt', 'a', encoding='utf8') as f:
  7. f.write('\n今天周四了 马上又要放假了 好开心!')
  8. """
  9. 我们所学习的r w a读写模式都只能操作文本文件,其他模式需要用d模式
  10. """

文件操作方法

  1. # 文件操作方法
  2. # 1.读系列
  3. with open(r'a.txt', 'r', encoding='utf8') as f:
  4. # print(f.read()) # 一次性读取文件内所有的内容
  5. # print(f.readline()) # 每次只读文件一行内容
  6. # print(f.readlines()) # 读取文件所有的内容 组织成列表 每个元素是文件的每行内容
  7. # print(f.readable()) # 判断当前文件是否具备读的能力
  8. # 2.写系列
  9. with open(r'a.txt','w',encoding='utf8') as f:
  10. # f.write('克服一切困难 奥利给!') # 往文件内写入文本内容
  11. # f.write(123) # 写入的内容必须是字符串类型
  12. # f.writelines(['jason','kevin','tony']) # 可以将列表中多个字符串元素全部写入
  13. # print(f.writable()) # True
  14. # print(f.readable()) # False
  15. f.flush() # 直接将内存内文件数据刷到硬盘 相当于ctrl+s

文件优化操作

  1. with open(r'a.txt', 'r', encoding='utf8') as f:
  2. # print(f.read()) # 一次性读取文件内所有的内容
  3. # print(f.read()) # 一次性读取文件内所有的内容
  4. # print(f.read()) # 一次性读取文件内所有的内容
  5. """
  6. 1.一次性读完之后 光标停留在了文件末尾 无法再次读取内容
  7. 2.该方法在读取大文件的时候 可能会造成内存溢出的情况
  8. 解决上述问题的策略就是逐行读取文件内容
  9. """
  10. # for line in f: # 文件变量名f支持for循环 相当于一行行读取文件内容
  11. # line
  12. '''以后涉及到多行文件内容的情况一般都是采用for循环读取'''

课堂练习

  1. 1.简易版本的注册、登陆功能
  2. 普通要求(实现一次即可)
  3. 注册功能
  4. 获取用户名和密码组织成你喜欢的样子写入文件即可
  5. 登陆功能
  6. 获取用户名和密码然后比对是否与文件内用户数据一致
  7. # 注册功能
  8. # 1.获取用户用户名和密码
  9. username = input('username>>>:').strip()
  10. password = input('password>>>:').strip()
  11. # 2.将用户名和密码组织成一个字符串
  12. data = '%s|%s' % (username, password)
  13. # 3.文件操作 写入数据
  14. with open(r'userinfo.txt', 'w', encoding='utf8') as f:
  15. f.write(data)
  16. print('用户:%s 注册成功' % username)
  17. # 登录功能
  18. # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
  19. username = input('username>>>:').strip()
  20. password = input('password>>>:').strip()
  21. # 2.获取文件内真实的用户数据
  22. with open(r'userinfo.txt','r',encoding='utf8') as f:
  23. # 由于现在文件中只有一行内容 我们干脆直接读取完
  24. data = f.read() # 'jason|jason123'
  25. '''with子代码执行完之后的结果是可以在外面使用的'''
  26. # 3.切割字符串获取真实的用户名和密码
  27. res = data.split('|') # ['jason', 'jason123']
  28. '''这里也可以直接使用解压赋值的操作 real_name,real_pwd = data.split('|')'''
  29. # 4.比对数据
  30. if username == res[0] and password == res[1]:
  31. print('登录成功')
  32. else:
  33. print('用户名或密码错误')

进阶练习

  1. # 多用户注册
  2. # while True:
  3. # # 1.获取用户用户名和密码
  4. # username = input('username>>>:').strip()
  5. # password = input('password>>>:').strip()
  6. # # 2.将用户名和密码组织成一个字符串
  7. # data = '%s|%s\n' % (username, password)
  8. # # 2.1.判断用户名是否已存在
  9. # with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
  10. # # 2.2.循环读取每一行用户数据
  11. # for line in f1:
  12. # # 2.3.获取每一行数据中的用户名
  13. # real_name, real_pwd = line.split('|')
  14. # # 2.4.判断用户名是否一致
  15. # if username == real_name:
  16. # print('用户名已存在')
  17. # break
  18. # else:
  19. # # 3.文件操作 写入数据
  20. # with open(r'userinfo.txt', 'a', encoding='utf8') as f:
  21. # f.write(data)
  22. # print('用户:%s 注册成功' % username)
  23. # 多用户登录
  24. # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
  25. username = input('username>>>:').strip()
  26. password = input('password>>>:').strip()
  27. # 2.获取文件内真实的用户数据
  28. with open(r'userinfo.txt', 'r', encoding='utf8') as f:
  29. for line in f:
  30. # 3.切割字符串获取真实的用户名和密码
  31. '''注意密码末尾有\n'''
  32. real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
  33. # 4.比对用户名和密码是否正确
  34. if username == real_name and password == real_pwd.strip('\n'):
  35. print('登录成功')
  36. break
  37. else:
  38. print('用户名或密码错误')

代码整合

  1. while True:
  2. print("""
  3. 1.用户注册
  4. 2.用户登录
  5. """)
  6. choice = input('请输入您想要执行的功能编号>>>:').strip()
  7. if choice == '1':
  8. # 1.获取用户用户名和密码
  9. username = input('username>>>:').strip()
  10. password = input('password>>>:').strip()
  11. # 2.将用户名和密码组织成一个字符串
  12. data = '%s|%s\n' % (username, password)
  13. # 2.1.判断用户名是否已存在
  14. with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
  15. # 2.2.循环读取每一行用户数据
  16. for line in f1:
  17. # 2.3.获取每一行数据中的用户名
  18. real_name, real_pwd = line.split('|')
  19. # 2.4.判断用户名是否一致
  20. if username == real_name:
  21. print('用户名已存在')
  22. break
  23. else:
  24. # 3.文件操作 写入数据
  25. with open(r'userinfo.txt', 'a', encoding='utf8') as f:
  26. f.write(data)
  27. print('用户:%s 注册成功' % username)
  28. elif choice == '2':
  29. # 1.获取用户名和密码(先使用input获取用户输入的数据 然后strip()移除首尾空格 之后赋值给变量名username)
  30. username = input('username>>>:').strip()
  31. password = input('password>>>:').strip()
  32. # 2.获取文件内真实的用户数据
  33. with open(r'userinfo.txt', 'r', encoding='utf8') as f:
  34. for line in f:
  35. # 3.切割字符串获取真实的用户名和密码
  36. '''注意密码末尾有\n'''
  37. real_name, real_pwd = line.split('|') # ['jason', 'jason123\n']
  38. # 4.比对用户名和密码是否正确
  39. if username == real_name and password == real_pwd.strip('\n'):
  40. print('登录成功')
  41. break
  42. else:
  43. print('用户名或密码错误')
  44. else:
  45. print('没有改功能 爱咋滴咋滴!')

文件操作模式

  1. t 文本模式
  2. 1.默认的模式
  3. r w a >>> rt wt at
  4. 2.该模式所有操作都是以字符串基本单位(文本)
  5. 3.该模式必须要指定encoding参数
  6. 4.该模式只能操作文本文件
  7. b 二进制模式
  8. 1.该模式可以操作任意类型的文件
  9. 2.该模式所有操作都是以bytes类型(二进制)基本单位
  10. 3.该模式不需要指定encoding参数
  11. rb wb ab

二进制模式读写操作

  1. # with open(r'a.txt','rb') as f:
  2. # # print(f.read())
  3. # print(f.read(6).decode('utf8'))
  4. # with open(r'a.txt','r',encoding='utf8') as f:
  5. # print(f.read())
  6. # print(f.read(4))
  7. """
  8. read() 括号内可以放数字
  9. 在t模式下表示字符个数
  10. 在b模式下表示字节个数
  11. 英文字符统一使用一个bytes来表示
  12. 中文字符统一使用三个bytes来表示
  13. """

文件内光标的移动

  1. with open(r'b.txt', 'rb') as f:
  2. print(f.read(4).decode('utf8'))
  3. print(f.tell()) # 查看光标移动了多少个字节
  4. f.seek(3, 1)
  5. print(f.read().decode('utf8'))
  6. """
  7. 控制文件内光标的移动 f.seek()
  8. f.seek(offset,whence)
  9. offset表示位移量
  10. 始终是以字节为最小单位
  11. 正数从左往右移动
  12. 负数从右往左移动
  13. whence表示模式
  14. 0:以文件开头为参考系(支持tb两种模式)
  15. 1:只支持b模式 以当前位置为参考系
  16. 2:只支持b模式 以文件末尾为参考系
  17. """
  18. # 小练习:实现动态查看最新一条日志的效果
  19. import time
  20. with open('a.txt', 'rb') as f:
  21. f.seek(0, 2)
  22. while True:
  23. line = f.readline()
  24. if len(line) == 0:
  25. # 没有内容
  26. time.sleep(0.5)
  27. else:
  28. print(line.decode('utf-8'), end='')

文件的内容修改

  1. # 方式1 覆盖
  2. with open(r'c.txt','r',encoding='utf8') as f:
  3. data = f.read()
  4. # print(type(data)) >>> str
  5. with open(r'c.txt','w',encoding='utf8') as f1:
  6. new_data = data.replace('tony','jason')
  7. f1.write(new_data)
  8. 1.不适合修改量大的文件
  9. # 方式2 新建
  10. import os
  11. with open('c.txt', mode='rt', encoding='utf-8') as read_f, \
  12. open('c.txt.swap', mode='wt', encoding='utf-8') as write_f:
  13. for line in read_f:
  14. write_f.write(line.replace('SB', 'kevin'))
  15. os.remove('c.txt') # 删除原文件
  16. os.rename('c.txt.swap', 'c.txt') # 重命名文件
  17. 1.需要插入模块才能实现删除功能
  18. 2.多创建一个文件

小练习

员工管理系统思路

  1. 1.整理今日内容并完成博客编写
  2. 2.熟练掌握课堂练习
  3. 普通版本 必会
  4. 进阶版本与封装版本掌握越快越好
  5. 3.写一个简易的拷贝工具
  6. 支持所有的文件类型

答案(2)

  1. 1.循环打印系统中拥有的功能
  2. 2.获取用户输入的功能编号并判断是否在已有功能中
  3. 3.先在循环外定义存储用户数据的列表(用户数据放在列表元素用字典形式)
  4. 4.先获取用户的编号
  5. 5.循环获取列表中每个用户字典 判断用户编号是否存在
  6. 6.存在则提示用户并重新打印全部功能
  7. 7.如果不存在则获取用户其他数据并组织成一个字典
  8. 8.最后添加到用户列表
  1. # 1.简易版本的注册、登陆功能
  2. # 普通要求(实现一次即可)
  3. # 注册功能
  4. # 获取用户名和密码组织成你喜欢的样子写入文件即可
  5. # 登陆功能
  6. # 获取用户名和密码然后比对是否与文件内用户数据一致
  7. print('''
  8. \33[31m1.用户注册
  9. \33[32m2.用户登录
  10. \33[33m3.删除用户
  11. \33[34m4.退出用户''') # 定义系统的几个功能
  12. while True:
  13. # 1. 注册功能,添加用户,首先获取用户创建的信息,然后存入数据库
  14. # 1.1 获取用户创建的信息
  15. choice = input('\033[35m选择功能编号:').strip()
  16. if choice == '1':
  17. print('\33[31m——————进入用户注册功能!——————')
  18. login_username = input('\33[31m请输入注册用户名:').strip()
  19. login_password = input('\33[31m请输入注册密码:').strip()
  20. # 1.2 将数据整合到一起
  21. login_msg = f'{login_username}|{login_password}\n'
  22. # 1.3 判断输入的注册信息是否在数据库中,需要读取数据库中的 用户名
  23. with open(r'login_date.txt', 'r', encoding='utf8') as f1:
  24. for line in f1:
  25. read_date_username, read_date_password = line.split('|')
  26. if login_username == read_date_username: # 1.4 如果在数据库,那就不行
  27. print('\33[36m该用户已存在,请更换用户名以继续!')
  28. break
  29. else:
  30. # 1.5 不在数据库,就需要将数据写入数据库中
  31. with open(r'login_date.txt', 'a', encoding='utf8') as f2:
  32. f2.write(login_msg)
  33. print(f'\33[36m用户{login_username}注册成功')
  34. elif choice == '2':
  35. print('\33[32m——————进入用户登录功能!——————')
  36. # 1. 获取用户输入的信息
  37. inp_username = input('输入用户名:').strip()
  38. inp_password = input('请输入密码:').strip()
  39. login_msg1 = f'{inp_username}|{inp_password}'
  40. # 2. 将数据库的信息读出来 跟用户输入的进行比对
  41. with open(r'login_date.txt', 'r', encoding='utf8') as f3: # 读信息
  42. for line in f3: # 把数据库内的数据一行一行的循环比对
  43. read_date_username1, read_date_password1 = line.split('|')
  44. if inp_username == read_date_username1:
  45. print(f'\33[32m用户{read_date_username1}登录成功!')
  46. break
  47. else:
  48. print('\33[31m未查询到此用户,请进行注册!')
  49. elif choice == '3':
  50. print('\33[33m用户删除')
  51. elif choice == '4':
  52. print('\33[34m退出程序')
  53. else:
  54. print('你个憨皮,未开通此功能!')

答案(3)

  1. 3.写一个简易的拷贝工具 支持所有的文件类型
  2. source_file = input('输入源文件路径:').strip()
  3. destination_file = input('输入目标文件路径:').strip()
  4. with open(rf'{source_file}','rb') as f1,open(rf'{destination_file}','wb') as f2:
  5. for line in f1:
  6. res = f2.write(line)
  7. print(res)

字符编码和Python代码操作文件的更多相关文章

  1. 字符编码和python中的文件处理

    字符编码与python文件处理 ---------------- 字符编码 1.常见的编码 ASCII: 美国人发明的,只编码英文字母和符号,1个字节. GB2312: 中国人发明的,增加了中文汉字和 ...

  2. 在Python中操作文件之truncate()方法的使用教程

    在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...

  3. day06 python代码操作MySQL

    day06 python代码操作MySQL 今日内容 python代码操作MySQL 基于python与MySQL实现用户注册登录 python操作MySQL python 胶水语言.调包侠(贬义词& ...

  4. 字符编码和python文件操作

    字符编码和文件操作 目录 字符编码和文件操作 1. 字符编码 1.1 什么是字符编码 1.2 字符编码的发展史 1.2.1 ASCII码 1.2.2 各国编码 1.2.3 Unicode 1.3 字符 ...

  5. python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)

    一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname&quo ...

  6. 字符编码codecs模块(读写文件)

    python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理.有一点需要清楚的是,当python要做编码转换的时候,会借助于内部的编码, ...

  7. python关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)

    一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 功能 说明 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirna ...

  8. 字符编码和python使用encode,decode转换utf-8, gbk, gb2312

    ASCII码 标准ASCII码使用7位二进制数表示大写或小写字母,数字0到9标点符号以及在美式英语中使用的特殊控制字符. 在标准ASCII码中,最高位(b7)用作奇偶校验位,所谓奇偶校验,是指在代码传 ...

  9. 字符编码到python编辑器流程

    字符(存储了信息的东西)编码(): 键盘发送的是电流-->主机(内存)接受到电流(当作010100110101)-->显示屏 接受电流(当作010100110101------->键 ...

随机推荐

  1. ES开源工具 elastichd 的使用(另一个elasticsearch可视化管理)

    1. 获取elastichd镜像 docker pull containerize/elastichd 2. 启动镜像 docker run -p 9800:9800 -d containerize/ ...

  2. react中自定义antd主题与支持less(第二部)

    自定义主题 首先自定义主题需要修改antd,antd本身也是less写的之后编译成css的,所以当我们需要使用less. 1.yarn add react-app-rewire-less --dev ...

  3. 第10组-Alpha冲刺 总结

    1.基本情况 组长博客链接:https://www.cnblogs.com/cpandbb/p/14007413.html 答辩总结: ·产品偏离了最开始的方向,地图和刷一刷功能做得没那么好,外卖订单 ...

  4. 在 python 项目中如何记录日志

    一. 概述 写本文的目的是我在写 python 项目的时候需要记录日志,我忘记怎么处理了,每次都需要去网上查一遍,好记性不如烂笔头, 这里把查阅的内容记录下来,方便以后查找. python 项目中记录 ...

  5. Android官方文档翻译 二 1.Building Your First App

    Building Your First App 创建你的第一个App项目 Dependencies and prerequisites 依赖关系和先决条件 * Android SDK * ADT Pl ...

  6. day4 对偶数、偶数位的操作

    1.函数fun()的功能:从低位开始取出整形变量s中偶数位上的数,依次构成一个新数放在t中.高位仍在高位. 效果理想:但是经测试的时候出现了错误 输入987654321时,打印出来的却是18681.经 ...

  7. 【记录一个问题】android下的ucontext协程,因为使用栈上的对象,导致cv::Mat被莫名析构

    工作的流程是这样:某个协程在栈上创建task对象,在task对象内有需要返回的cv::Mat. 然后把task放到另一个线程上去执行,然后切换到别的协程,等到工作线程执行完task后,再唤醒协程. 这 ...

  8. golang中json格式化自定义日期格式

    go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.g ...

  9. 虚拟化技术kvm,xen,vmware比较

    目前市面上常用的虚拟机技术主要有KVM.xen.vmware. KVM是指基于Linux内核(Kernel-based)的虚拟机(Virtual Machine).KVM最大的好处就在于它是与Linu ...

  10. Photoshop如何快速扣取图标

    由于图标往往与背景色区别很大,因此首先使用魔棒工具快速选择出图标 有时候选择出来是图标,有时候是背景色 可以通过选择反向来调节(右键即可) ctrl + J 提取出选择的区域 这时进行等分裁剪即可 点 ...