1.pass

一般python的代码块是基于**:与所缩进**来实现的,python中规定代码块必须要有代码才完整,在没有代码的情况下为了保证语法的完整性可以使用pass代替

if 2:pass
else:pass

2. is & ==

  • == 用于比较两个值是否相等
  • is,用于表示内存地址是否一致
v1 = []
v2 = []
print(v1 == v2)  #True
print(v1 is v2)  #False
v1 = []
v2 = v1
print(v1 == v2)  #True
print(v1 is v2)  #True
v1 = None
v2 = None
print(v1 == v2)  #True
print(v1 is v2)  #True

3.encode & decode

由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode

由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode

4.文件

4.1. 什么是文件?

文件时操作系统西贡给用户/应用程序操作硬盘的一种虚拟的概念/接口,用户/应用程序可以通过文件将数据永久保存在硬盘中。

用户/应用程序直接操作的使文件,对文件的所有操作,都是想操作系统发送系统调用,然后再由操作将其转换成具体的硬盘操作。

4.2 如何用文件:open()

  1. 控制文件读写内容的模式(t/b)
  • t 文本(默认模式,r):
  • b 二进制/bytes
  • 注: t/b不可以单独使用,必须跟r/w/a连用
  1. 控制文件读写操作的模式
  • r 只读模式
  • w 只写模式
  • a 只追加模式
    +: r+ ,w+, a+

4.3 文件操作

  • 4.3.1路径问题

路径可以分为绝对路径和相对路径

绝对路径一般为c:x/xx/xx/xxx/xxxxxx.py的形式,在pycharm可通过右键单击文件->copy path 获得。
但直接获得路径往往不能直接使用,需要进行一些操作,共3种方式: 1.在路径前加“r” 2. 将’ \‘改为’/’ 3.将“\”改为“\\”

# 方法1path1 = r"C:\Users\10500\Desktop\AI_Learning\1_python_learning\01_python_basic\xxx.txt"# 方法2path2 = "C:/Users/10500/Desktop/AI_Learning/1_python_learning/01_python_basic/xxx.txt"# 方法3path3 = "C:\\Users\\10500\\Desktop\\AI_Learning\\1_python_learning\\01_python_basic\\xxx.txt"

相对路径为相对于此程序所在的文件夹为起始文件夹,直接写文件路径
有三种写法:
① ./ : 表示当前路径(一般省略不写);
② …/ : 表示上一级目录(以此类推);
③ / : 表示根目录开始。

这种情况下,其路径可以写为 path = 'aa/b.txt'path = './aa/b.txt'

  • 4.3.2. 基本文件操作

文件处理分为3步:
1、打开文件
2、操作文件
3、关闭文件

#1 . 打开文件
f=open("xxx.txt",mode="rt")
print(f)# 2、操作文件:
res = f.read()
print(res)# 3、关闭文件
f.close()
print(f)
# f.read() #变量f存在,但是不可再读,会报错

注意:

  1. f是一种变量,占用应用程序的内存空间,但是open本身是一种文件操作, 故还占操作系统的内存空间
  2. 操作文件:读写文件,应用程序对文件的读写请求都是向操作系统发送系统调用,然后由操作系统控制硬盘把输入读入内存,或者写入硬盘
  3. 一定要注意关闭文件:因为回收操作系统的资源,系统打开文件的数目是有限的、
  4. 在关闭文件之后,虽然文件没有被清除掉,但此时仍然无法对文件进行读写操作
  • 4.3.3. with上下文管理

with会自动调用 f1.close() , f2.close(),

with open('xxx.txt',mode='rt') as f1,open('./aa/b.txt',mode='rt') as f2:   res = f1.read()res2 = f2.read()print(res)print(res2)
  • 4.3.4. 指定字符编码

数据存储在硬盘:utf-8格式的二进制
数据存储在内存:utf-8格式的二进制->默认解码->Unicode

t模式会将f.reaf.read()读出的结果解码成Unicode,Windows默认按照gbk解码,由于解码一定要保证与编码方式一致,如果不写encoding='utf-8',当文本中含有中文字符的时候就会报错。

with open('c.txt',mode='rt',encoding='utf-8') as f:res = f.read()   print(res,type(res))
  • 4.3.5. r

r 模式为默认操作模式:只读模式,当文件不存在会报错

with open('c.txt',mode='rt',encoding='utf-8') as f:print("第一次读".center(50,'*'))res = f.read()   # 从当前位置开始文件一次性读完print(res)print("第二次读".center(50,'*'))  res1= f.read()print(res1)'''
文件指针已经到了文件尾部,故没有内容
'''
with open('user.txt',mode='rt',encoding='utf-8') as f1:for line in f1:print(line)print(line,end="")'''会发现输出 结果有两个换行符:一个源自原文行与行之间,另一个来自于python自带如果改成 print(line,end="")  ,则没有空行'''

案例实现:比对用户输入与后台文件的账户密码

#方法1:
with open('user.txt',mode='rt',encoding='utf-8') as f:res = f.read()res = res.split('\n')dic={}for item in res:name,psw = item.split(':')dic[name]=psw
print(dic)while True:inp_name = input('please input your name!>>')if inp_name in dic:inp_psw = input('please input your password!>>')if dic[inp_name]==inp_psw:print("successful")breakelse:print("Fail!please reinput it!")else:print("Your username error!please reinput it!")
#方法2:
with open('user.txt',mode='rt',encoding='utf-8') as f1:inp_name = input('please input your name!>>')inp_psw = input('please input your password!>>')for line in f1:name , psw = line.strip().split(':')if name==inp_name and psw == inp_psw:print("login successful")breakelse:print("name or psw error")
  • 4.3.6. w

  1. w 模式为只写模式,当文件不存在会创建一个空文件,当文件存在会清空文件,指针位于开始位置。
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write("fffff反反复复烦烦烦\n")f.read()   #只写模式下不可读,报错

注意:

  1. 每次进行写操作,不是简单的文件覆盖,而是先清空,再写。故关键性的文件绝对不能用w模式打开
  2. 只写模式下不可读
  1. 在以W模式打开文件,没有关闭的情况下,连续写入,新的内容总是跟在旧的内容之后 ; 如果重新以w模式打开文件,则会清空文件内容
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write("钱钱钱钱钱\n")f.write('得到的\n')f.write('烦烦烦烦烦烦\n')f.write('嘎嘎嘎嘎嘎嘎嘎\n')'''
运行结果:
钱钱钱钱钱
得到的
烦烦烦烦烦烦
嘎嘎嘎嘎嘎嘎嘎'''
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write("钱钱钱钱钱\n")
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write('得到的\n')
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write('烦烦烦烦烦烦\n')
with open("run.txt",mode="wt",encoding='utf-8') as f:f.write('嘎嘎嘎嘎嘎嘎嘎\n')'''
运行结果:
嘎嘎嘎嘎嘎嘎嘎'''

案例:文件的copy工具

src_path = input("请输入拷贝源文件的绝对路径>>").strip()
with open(r'{}'.format(src_path),mode="rt",encoding='utf-8') as f1,\open("copy.txt",mode='wt',encoding='utf-8') as f2:res = f1.read()f2.write(res)
  • 4.3.7. a

    1. a 模式为只追加写模式,当文件不存在会创建一个空文件,当文件存在,文件指针会直接跳在文件末尾位置。
with open("run.txt",mode="at",encoding='utf-8') as f:f.write("fffff反反复复烦烦烦\n")f.read()   #只追加模式下不可读,报错

注意:

  1. 每次进行写操作,在文章末尾追加内容
  2. 只追加模式下不可读

强调 w 模式与 a 模式的异同

  • 相同点:在打开的文件不关闭的情况下,连续的写入,新写的内容总会跟在前写的内容之后
  • 不同点:以 a 模式重新打开文件,不会清空原文件内容,会将文件指针直接移动到文件末尾,新写的内容永远写在最后

案例:

inp_name = input('please input your name!>>')
inp_psw = input('please input your password!>>')
with open('login.txt',mode='at',encoding='utf-8') as f:text = inp_name+":"+inp_psw+"\n"f.write(text)
  • 4.3.8.阶段习题

1、注册功能

  • 用户输入账号密码,按照"runrun: 18"的格式存入文件

2、基于上述注册信息,完成验证功能

  • 即用户验证的账号密码来源于文件
  • 验证成功打印login sucessful
  • 验证错误输出账号or密码错误

3、编写文本文件copy程序

  • 4.3.7. + (不重要)

  1. x 模式为只写模式【不可读】,当文件不存在会创建一个空文件;文件存在报错。
with open("run.txt",mode="x",encoding='utf-8') as f:f.write("fffff反反复复烦烦烦\n")f.read()   #只写模式下不可读,报错
  • 4.3.8.t

  • 1读写都是以str(Unicode)为单位
  • 2只针对文本文件
  • 3必须指定encoding = “utf-8”
with open('CT.mp4',mode='r') as f:f.read()   #如果读视频文件,报错

  • 4.3.9. b

  • 1 读写都是以bytes为单位
  • 2 可以针对所有文件
  • 3 一定不能指定encoding ,只要指定就报错
  • 4 b模式更通用
with open('CT.mp4',mode='rb') as f:res= f.read()   #硬盘二进制读入内存->b模式下,不做任何转换,直接读入内存print(res)  #bytes类型-》当成二进制print(type(res))
with open('c.txt',mode='wb') as f:f.write("hhhhhhh还会和") # 报错with open('c.txt',mode='wb') as f:f.write("hhhhhhh还会和".encode('utf-8'))

注意:在写入的时候,一定要将字符串进行编码,由于pycharm默认以utf-8的形式打开文件,故此处需要手动将字符串编码成utf-8的形式

  • 4.3.10. 循环

  1. while循环 (自己控制每次读取的数据量)
with open('CT.mp4',mode='rb') as f:while True:res = f.read(1024)if len(res) == 0:breakprint(len(res))
  1. for循环 (以行为单位读取)
with open('CT.mp4',mode = 'rb') as f:for line in f:print(line)
  • 4.3.11. 内容拾零

    1. 读相关
    1. readline:从当前位置一次读一行
      readlines :从当前位置读到最后
    1. f.read f.readlines 都是将内容一次性读入内存,如果内容过大会导致内存溢出,若还想将内容全部读入,需要分多次读。
with open('user.txt',mode='rt',encoding='utf-8') as f:while True:line = f.readline()lines = f.readlines()if len(line) == 0:breakprint(line)print(lines)
    1. 写相关
    1. f. writelines() 将列表的str按行写入文件
with open('xxx.txt',mode='wt',encoding='utf-8') as f:f.write('111\n222\n333\n')#write 可以利用\n写多行
#方法1l = ["111",'222','333']for line in l:f.write(line)
#方法2
#将列表中的str按行写入文件 f.writelines(l)
    1. bytes转化
  1. 如果内容是纯英文,则不用每一个都encode,只需每个字符串前加个“b",转换成bytes类型
  2. 将字符串转换成bytes类型:str = “润” str.encode(“utf-8”) 等价于 bytes(str,encoding=‘utf-8’)
with open('xxx.txt',mode='wb') as f:f.write('111\n222\n333\n'.encode('utf-8'))l = ["111".encode('utf-8'),'222'.encode('utf-8'),'333'.encode('utf-8')]f.writelines(l)with open('xxx.txt',mode='wb') as f:f.write(b'111\n222\n333\n')l = [b"111",b'222',b'444']f.writelines(l)
  • 4.flush:主要用于写操作
 with open('c.txt',mode='wt',encoding='utf-8') as f:f.write('哈哈哈哈哈')# f.flush()  #大多数情况不要执行,对计算机性能损耗
  • 5 。其他
with open('c.txt',mode='wt',encoding='utf-8') as f:print(f.readable())  #可读否print(f.writable())  #可写否print(f.closed)  #关闭否print(f.name)  #名字print(f.encoding)   #编码(一般是'utf-8)
print(f.closed)

4.4 指针控制

指针移动是以bytes/字节为单位:只有在t模式下,read(n),n代表的是字符个数

4.5 练习:用户管理系统

print('-------------------------')
print('欢迎来到用户登录系统')
print('请选择功能')
print('1.添加学员')
print('2.删除学员')
print('3.修改学员')
print('4.查询学员')
print('5.显示所有学员')
print('6.退出系统')
print('-------------------------')def user_trans_to_dic():dic = {}with open('user.txt', mode='rt', encoding='utf-8') as f:for line in f:name, psw = line.strip().split(':')dic[name] = pswprint(dic)return dicdef add_user():with open('user.txt', mode='at', encoding='utf-8') as f:msg = input('请输入新用户信息,如:张三:123')f.write(msg + "\n")def del_user():dic = user_trans_to_dic()with open('user.txt', mode='wt', encoding='utf-8') as f:msg = input('请输入删除用户姓名,如:张三')if msg in dic:dic.pop(msg)print('该用户已删除,剩余用户为:' + str(dic))for name, psw in dic.items():str1 = '{}:{}\n'.format(name, psw)f.write(str1)else:print('该用户没有在用户数据库中')def revise_user():dic = user_trans_to_dic()with open('user.txt', mode='wt', encoding='utf-8') as f:input_name = input('请输入修改用户姓名,如:张三')if input_name in dic:msg = input('请输入修改用户信息,如:张三:123')name, psw = msg.strip().split(':')dic[name] = pswfor name, psw in dic.items():str1 = '{}:{}\n'.format(name, psw)f.write(str1)print("修改完成")else:print('该用户没有在用户数据库中')def inquire_user():dic = user_trans_to_dic()with open('user.txt', mode='rt', encoding='utf-8') as f:input_name = input('请输入查询用户姓名,如:张三')if input_name in dic:psw = dic[input_name]str1 = '用户姓名为:{},用户密码为:{}'.format(input_name, psw)print(str1)print("查询完成")else:print('该用户没有在用户数据库中')def all_user():with open('user.txt', mode='rt', encoding='utf-8') as f:for line in f:print(line)print("全部用户显示完成")while True:num = input('请输入功能序号')if num == '1':add_user()elif num == '2':del_user()elif num == '3':revise_user()elif num == '4':inquire_user()elif num == '5':all_user()elif num == '6':ans = input('请问您真的要退出系统嘛?Y(y)/N(n)')if ans.upper() == 'Y':breakelse:print('输入无效,请重新输入')

(三)python的文件操作相关推荐

  1. Python基础-文件操作

    Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...

  2. python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作

    Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...

  3. 15 python的文件操作

    一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...

  4. Python之文件操作_读取_编码_os模块

    目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...

  5. python写文件追加 按行追加_你真的会用python进行文件操作吗

    本篇文章主要比较系统的介绍了python中文件操作,以及在在使用中需要注意的问题. 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非易失性存储器中实现持续性存储, ...

  6. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  7. python对文件操作-python中文件操作的其他方法

    Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open("poems" ...

  8. python面试文件操作_python基础-三分钟搞定面试官爱问的【文件操作】

    一.使用python读写文本文件 使用Python来读或者写文本需要用到'open'这个关键字,它的作用是打开一个文件并创建一个文件对象. open语法结构: open(file, mode='r', ...

  9. 第三章 Python基础——文件操作函数

    3.1三元运算 三元运算又称三目运算,是对简单条件的简写 if 条件成立:val=1 else:val=2 改成三元运算: val=1 if条件成立 else 2 3.2字符编码转换 编码的种类情况: ...

  10. Python之路【第三篇】:文件操作

    一.文件操作步骤 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 歌名:<大火> 演唱:李佳薇 作词:姚若龙 作曲:马奕强 歌词: 有座巨大的停了的时钟 倾倒在赶 ...

最新文章

  1. 数据库及页面乱码问题
  2. Centos7 cdh5.14 安装
  3. mysql与ms sql server_MS SQL Server和MySQL区别
  4. 算法模板——二分图匹配
  5. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
  6. Amazon Go亮相:消费者无需结账即可完成店面购物
  7. JVM调优总结(七)-典型配置举例1
  8. XML在线转化为JSON
  9. dwr 写的小程序,配置
  10. Iphone屏幕旋转
  11. boost序列化(Serialization)
  12. 163邮箱:退信代码(对照表) - 说明篇
  13. libusb libusbk
  14. debian linux上usb摄像头,[Debian] 安装USB摄像头(芯片ZC0301)驱动
  15. httpclient使用代理ip
  16. python掷骰子实验代码_Python Tkinter实例——模拟掷骰子
  17. 获奖团队访谈录|“AI+无线通信赛道”二等奖团队
  18. 如何计算每月还多少房贷
  19. mysql jdbc驱动 批量更新_jdbc批量插入,删除,更新
  20. 开发一个基于Dalvik字节码的相似性检测引擎,比较同一款Android应用程序的不同版本之间的代码差异(二)

热门文章

  1. java SE常用的API和一些常用Test
  2. 微商怎么做如何快速找客源做好微信朋友圈营销
  3. 《Linux就该这么学》—非常适合linux技术学习的入门好书
  4. vscode 添加 includePath
  5. WORD BYTE 相互转换
  6. 安装harbor docker镜像仓库
  7. 《挪威的森林》进行时
  8. 开启Windows的telnet客户端
  9. Radio Frequency Identification 射频识别
  10. 两年买了3套房,我都是“装”出来的