文件操作介绍:
- 文件的打开与关闭 文件的操作过程与讲大象放入冰箱的操作是很相似的!
文件的操作介绍在Python使用open函数,可以打开一个已经存在的文件,或者创建一个新的文件。
open(文件名,访问模式)e.g.f =open("text.txt"."w")如果文件不存在那么创建,如果存在就先清空数据,然后在写入数据 在这里插入图片描述 注意:要读取二进制文件,比如图片、视频等等,用"rb"," wb","ab"等模式打开
- file对象的属性
- 文件的打开 seek(ossset,from)有两个参数: offset:偏移量 from放向: 0: 表示文件的开头; 1:表示当前位置 2:表示文件的末尾
文件的关闭 方法1:调用close()关闭文件。文件使用完毕必须关闭文件,因为文件对象会占用操作系统的资源。并且操作系统同一时间能打开的文件数量是有限的。 方法2:python引用了with语句来帮我们调用close()方法: with open("路径文件+后缀","r")as f: print(f.read())- with的语句工作原理: python 中with语句使用与对资源进行访问的场合,保证不管处理过程中是否发生了错误或者一场都会自动执行规定的(“清理”)操作,释放访问的资源,比如有的文件读写后自动关闭、线程中锁的自动获取与释放等。
with open('doc/passwd') as f: print("with语句里面:", f.closed) print(f.read(10)) print("with语句外面:", f.closed) 文件的备份 import os def copy(source_file, dst_file): """ 实现拷贝文件的操作 思路: cp /etc/passwd /etc/hello 1. 判断拷贝的文件是否存在? 2. 如果存在, 将源文件的内容读出来, 写入目标文件 """ if os.path.exists(source_file): # 将源文件的内容读出来 f = open(source_file) content = f.read() f.close() # 写入目标文件 dst_f = open(dst_file, 'w') dst_f.write(content) dst_f.close() print("拷贝%s为%s成功" %(source_file, dst_file)) else: print("源文件%s不存在" %(source_file)) copy('/etc/passwd', 'doc/passwd-备份')os模块
os语义为操作系统,处理操作系统相关的功能,可跨平台。比如显示当前的目录下所有的文件、算出某个文件、获取文件的大小
import os # 1). 返回操作系统类型, 值为posix,是Linux操作系统, 值为nt, 是windows操作系统 print(os.name) os_name = 'Linux' if os.name =='posix' else 'Windows' print("当前操作系统: %s" %(os_name)) # 2). 操作系统的详细信息 detail_info = os.uname() print(detail_info) print("主机名:", detail_info.nodename) print("硬件架构:", detail_info.machine) print("系统名称:", detail_info.sysname) print("Linux内核的版本号:", detail_info.release) # 3). 系统环境变量等价于Linux的env命令 print(os.environ) # 4). 通过key值获取环境变量对应的value值 print(os.environ['PATH']) 关于路径os 模块中rename()可以完成对文件的重命名操作。 rename(需要修改的文件名,新的文件名) os模块中remove()可以完成对文件的删除操作 remove(待删除的文件名)
练习: 生成包含有两个大写、一个小写、一个数字的随机验证码:
""" 生成验证码: 一般是4位组成, 有字母(大写,小写),数字 """ import string import random def generate_code(length=4): """ 默认生成4位验证码: 由两个大写字母,一个小写字母和一个数字组成; :param length: :return: """ # 从某个序列里面随机获取几个元素; # code_li = random.sample(string.ascii_letters + string.digits, length) code_li = random.sample(string.ascii_uppercase, 2) + random.sample(string.ascii_lowercase, 1) \ + random.sample(string.digits, 1) # 将生成的验证码顺序打乱; random.shuffle(code_li) # 将列表拼接成字符串 return "".join(code_li) code = generate_code() print(code) json 模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。 JSON注意事项: (1)名称必须用双引号(即:””)来包括 (2)值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组,或子对象。 python 和json 数据类型映射关系注意:python 中str类型到JSON中转为unicode类型,None转为null,dict对应object; pyhton中的集合不能转成json格式。
json中常用的方法
常用方法:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw) # 函数作用: 将Python的对象转变成JSON对象 # skipkeys: 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False # ensure_ascii = Flase: 中文存储需要设定 # check_circular: 循环类型检查,如果为True的话 # allow_nan: 确定是否为允许的值 # indent: 会以美观的方式来打印,呈现,实现缩进 # separators=(',',':'): 自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号 # encoding: 编码方式,默认为utf-8 # sort_keys=True: 字典排序 # indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大 我们碰到集合对象, datetime对象,或者自定义的类对象等json默认不支持的数据类型时,我们就需要自定义编解码函数。有两种方法来实现自定义编解码。pickle模块
ython的pickle模块实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。JSON和pickle模块的区别
1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。 2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。参考: https://blog.csdn.net/weixin_40636692/article/details/81212304