python学习笔记_第21天(文件操作--IO 技术)
使用pickle 序列化
Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。
序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。
pickle.dump(obj, file) # obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file) # 从file 读取数据,反序列化成对象
# 将对象序列化到文件中
import picklewith open(r"pickle.dat", "wb") as f:a1 = "python"a2 = 123a3 = ['a', 'b', 'c']pickle.dump(a1, f)pickle.dump(a2, f)pickle.dump(a3, f)# 将获得的数据反序列化成对象
with open(r"pickle.dat", "rb") as f:b1 = pickle.load(f) # 存入与取出的顺序需一致,先存入的先被取出b2 = pickle.load(f)b3 = pickle.load(f)print(b1)print(b2)print(b3)
print(id(a1))
print(id(b1)) # 反序列化的值与原对象相同,但id不同,是一个新建的对象
执行结果:
python
123
[‘a’, ‘b’, ‘c’]
3019697409200
3019698575024
CSV 文件的操作
与Excel 文件不同,CSV 文件中:值没有类型,所有值都是字符串。不能指定字体颜色等样式,不能指定单元格的宽高,不能合并单元格。
Python 标准库的模块csv 提供了读取和写入csv 格式文件的对象。
# csv.writer 对象写一个csv 文件
import csvheaders = ["工号", "姓名", "年龄", "地址", "月薪"]
rows = [["1002", "李四", 25, "北京", "10000"], ["1003", "王五", 22, "深圳", "8000"]] # 列表中每行记录为列表是csv文件在对象中的存储方式
with open(r"a.csv", "w",newline='') as f: # windows下newline默认为换行符,即输入一行数据会默认空一行,可设置newline不换行f_csv = csv.writer(f) # 创建csv 对象f_csv.writerow(headers) # 写入一行(标题)f_csv.writerow(["1001", "张三", 18, "上海", "5000"]) # 单行写入数据f_csv.writerows(rows) # 写入多行(数据)# csv.reader 对象于从csv 文件读取数据
with open(r"a.csv", 'r') as f:f_csv = csv.reader(f) # 创建csv 对象,它是一个包含所有数据的列表,每一行为一个列表元素存储在列表中print(f_csv)print(list(f_csv)) # [['工号', '姓名', '年龄', '地址', '月薪'], ['1001', '张三', '18', '上海', '5000'], ['1002', '李四', '25', '北京', '10000'], ['1003', '王五', '22', '深圳', '8000']]with open(r"a.csv", 'r') as f:f_csv = csv.reader(f) for row in f_csv: # 循环打印各行内容print(row)
执行结果:
<_csv.reader object at 0x000002B6D6F3CC18>
[[‘工号’, ‘姓名’, ‘年龄’, ‘地址’, ‘月薪’], [‘1001’, ‘张三’, ‘18’, ‘上海’, ‘5000’], [‘1002’, ‘李四’, ‘25’, ‘北京’, ‘10000’], [‘1003’, ‘王五’, ‘22’, ‘深圳’, ‘8000’]]
[‘工号’, ‘姓名’, ‘年龄’, ‘地址’, ‘月薪’]
[‘1001’, ‘张三’, ‘18’, ‘上海’, ‘5000’]
[‘1002’, ‘李四’, ‘25’, ‘北京’, ‘10000’]
[‘1003’, ‘王五’, ‘22’, ‘深圳’, ‘8000’]
os 和os.path 模块
os 模块可以帮助我们直接对操作系统进行操作。可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等,是系统运维的核心基础。
os.system
可直接调用系统的命令
import osos.system('notepad.exe') # 代码执行完一条关闭所开资源后执行下一条
os.system('regedit')
os.system('cmd') # 在下方命令窗口中打开终端窗口界面
os.system('ping www.baidu.com') # 网页链接
os.startfile
直接调用可执行文件
# 直接调用可执行的程序/文件
os.startfile(r"C:\Program Files (x86)\MGTVPCC\芒果TV.exe")
os 模块-文件和目录操作
- os 模块下常用操作文件的方法
方法名 | 描述 |
---|---|
stat(path) | 返回文件的所有属性 |
remove(path) | 删除指定的文件 |
rename(原文件名,新文件名) | 重命名文件或目录 |
listdir(path) | 返回path 目录下的文件和子目录列表 |
- os 模块下关于目录操作的相关方法
方法名 | 描述 |
---|---|
sep | 当前操作系统所使用的路径分隔符 |
linesep | 当前操作系统所使用的换行符 |
getcwd() | 返回当前工作目录:current work dir |
chdir(path) | 把path设为当前工作目录 |
mkdir(path) | 创建目录 |
makedirs(path1/path2/path3/…) | 创建多级目录 |
rmdir(path) | 删除目录(条件:空目录) |
removedirs(path1/path2…) | 删除多级目录(条件:空目录) |
# 测试os 模块中,关于文件和目录的操作
import os# 获取文件和文件夹相关的信息
print(os.name) # 操作系统:windows->nt linux 和unix->posix
print(os.sep) # 分隔符:windows->\ linux 和unix->/
print(repr(os.linesep)) # 换行符:windows->\r\n linux-->\n\;repr() 函数将对象转化为供解释器读取的形式。
print(os.stat(r"..\pickle.py")) # 获取指定文件的信息,../指的是上一级目录# 关于工作目录的操作
print(os.getcwd()) # 返回当前的工作目录
os.chdir("..") # 改变当前的工作目录为指定目录
os.mkdir("书籍") # 在已指定的工作目录下创建一个子目录
os.rmdir("书籍")# 创建目录、创建多级目录、删除
os.mkdir("书籍") # 在当前工作目录下创建一个子目录
os.rmdir("书籍") # 相对路径都是相对于当前的工作目录
os.makedirs("电影/港台/警匪")
os.rename("电影", "movie") # 文件/目录重命名
dirs = os.listdir("movie") # 展示当前目录下的一级子目录
print(dirs) # 一级子目录下的内容不展示
os.removedirs("movie/港台/警匪") # 只能删除空目录
os.path 模块
os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作
方法 | 描述 |
---|---|
isabs(path) | 判断path 是否绝对路径 |
isdir(path) | 判断path 是否为目录 |
isfile(path) | 判断path 是否为文件 |
exists(path) | 判断指定路径的文件是否存在 |
getsize(filename) | 返回文件的大小 |
abspath(path) | 返回path或当前工作路径与文件连接起来 |
dirname(path) | 返回目录的路径 |
getctime(filename) | 返回文件的创建时间 |
getatime(filename) | 返回文件的最后访问时间 |
getmtime(filename) | 返回文件的最后修改时间 |
split(path) | 对路径进行分割,以列表形式返回 |
splitext(path) | 从路径中分割文件的扩展名 |
join(path,*paths) | 连接多个path |
# 测试os.path 常用方法
import os
import os.path# 获得目录、文件基本信息print(os.path.isabs(r"E:\working\Pycharm_project\Python_primary\Day_21\os_modular")) # 是否绝对路径,True
print(os.path.isdir("../a.csv")) # 是否目录,False
print(os.path.isfile("../a.csv")) # 是否文件,True
print(os.path.exists("../a.csv")) # 文件是否存在,True
print(os.path.getsize("../a.csv")) # 文件大小,99
print(os.path.abspath("../a.txt")) # 输出绝对路径,当文件不存在也不报错
print(os.path.dirname(r"E:\working\Pycharm_project\Python_primary\Day_21\os_modular\a.csv")) # 输出所在目录# 获得创建时间、访问时间、最后修改时间
print(os.path.getctime("../a.csv")) # 返回创建时间
print(os.path.getatime("../a.csv")) # 返回最后访问时间
print(os.path.getmtime("../a.csv")) # 返回最后修改时间# 对路径进行分割、连接操作
path = os.path.abspath("a.txt")
print(os.path.split(path)) # 返回元组:(目录,文件名.后缀)
print(os.path.splitext(path)) # 返回元组:(路径,.后缀)
print(os.path.join("aa", "bb", "cc")) # 返回路径:aa\bb\cc
执行结果:
True
False
True
True
99
E:\working\Pycharm_project\Python_primary\Day_21\a.txt
E:\working\Pycharm_project\Python_primary\Day_21\os_modular
1612614575.7759595
1612617824.3058853
1612617823.9624052
(‘E:\\working\\Pycharm_project\\Python_primary\\Day_21\\os_modular’, ‘a.txt’)
(‘E:\\working\\Pycharm_project\\Python_primary\\Day_21\\os_modular\\a’, ‘.txt’)
aa\bb\cc
# 列出指定目录下所有的.py 文件,并输出文件名import osos.chdir('..')
path = os.getcwd() # 获取当前工作目录
file_list = os.listdir(path) # 列出子目录和子文件列表,可迭代对象
for filename in file_list:if filename.endswith('py'):print(filename, end="\t")
print('')
file_list2 = [filename2 for filename2 in os.listdir(path) if filename2.endswith(".py")] # 生成器
for filename2 in file_list2:print(filename2, end="\t")
执行结果:
csv_modular.py pickle.py
csv_modular.py pickle.py
walk()递归遍历所有文件和目录
os.walk()方法:
返回一个3 个元素的元组,(dirpath, dirnames, filenames),
dirpath:要列出指定目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件
# 使用walk()递归遍历所有文件和目录
import osall_files = [] # 文件地址存放列表
os.chdir('..') # 更改上级目录为当前目录
path = os.getcwd() # 获取当前工作目录
list_files = os.walk(path) # ctrl+单击walk,可以查看函数介绍和源代码
for dirpath, dirnames, filenames in list_files: # os.walk()方法返回一个3个元素的元组,(dirpath,dirnames,filenames)for dir in dirnames: # 目录下的所有文件夹all_files.append(os.path.join(dirpath, dir))for name in filenames: # 目录下的所有文件all_files.append(os.path.join(dirpath, name))# 打印子目录和子文件
for file in all_files:print(file)
python学习笔记_第21天(文件操作--IO 技术)相关推荐
- python学习笔记:第8天 文件操作
目录 1. 文件操作介绍 2. 文件操作的几种方式 3. 文件的操作的方法 1. 文件操作介绍 说到操作文件我们肯定会想到流,文件的操作都是通过流来操作的.在python中文件的操作非常简单,并不像J ...
- python学习笔记Day4 面向对象编程,文件操作,os模块,代码调试
一.traceback模块 错误日志可能用到 import tracebackwhile 1: # 捕获异常的顺序按照先父类后子类try:n1 = int(input('请输入一个被除数'))n2 = ...
- Python(10)文件操作(IO 技术)、OS模块、递归
文章目录 文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象 open() 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312 GBK GB1 ...
- Python学习笔记--day09 函数 模块 (文件、路径操作)
第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...
- Python 学习笔记(2)创建文件夹
目的:在指定路径下创建一个文件夹: 步骤: 1.先确定路径和创建的文件夹的名字,路径可以在工程下的一个名称为File的文件夹下面,需要新建的文件夹名称为当前的时间: 这边需要使用两个Python的库 ...
- python学习笔记9.2-文件及文件夹操作
本文主要介绍python对文件以及文件夹的操作,主要涉及到文件的创建.读取.文件内容的修改.删除,文件夹的索引.目录的判断等等.此节内容非常重要,是以后编程的基础.python文件夹和文件的操作主要借 ...
- python学习必会知识点:对文件操作详解
python文件读写示例 with open(file_w_path, 'r') as f_r:with open(file_r_path, 'w') as f_w:for line in f_r.r ...
- C#学习笔记【十四】—— 文件操作
14.1文件读写方式 下面的类用于浏览文件系统和执行操作,比如移动,复制和删除文件System.MarshalByRefObject这个是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组 ...
- Python学习笔记_文件读写,目录遍历类封装
文件读写和目录遍历类的封装. mylib.py 1 # -*- coding:utf-8 -*- 2 3 __author__ = 'huanghuan' 4 5 import os 6 from o ...
最新文章
- C语言中字符数组和字符串指针分析
- ubuntud——系统备份和恢复
- 20150920 DNS服务
- 2016年我国研究的超级计算机,盘点2016:我国科研取得的重大成果
- kafka安装(版本kafka_2.11-0.11.0.0)
- Git之深入解析如何运行自己的Git仓库托管服务器
- arcgis 获取json经纬度_干货|ArcGIS的矢量化操作——ArcGis中进行地形图的配准
- 里公式后面标号怎么对齐_你若会用Word里F4键,又何须加班到半夜?
- layui前端框架弹出框图标整理
- python消息队列celery_python异步任务神器celery
- Phpstorm-php在线手册配置
- 修改 cmd 控制台默认代码页编码
- Iphone版音乐计算机,iPhone网易云音乐app的离线音乐导出到电脑
- 商标不仅仅是个标记,更是企业的无形资产和价值财富!
- 我的U盘终于中招啦:U盘快捷方式病毒
- 在职位招聘数据处理中使用Loess回归曲线以及分箱、回归、聚类方法 检查离群点及光滑数据【数据挖掘机器学习】
- 猪八戒网站上的骗子为什么这么多
- Unable to find libthread_db matching inferior‘s thread library, thread debugging will not be availab
- ElasticSearch Docker 部署实例
- 操作系统期末复习-第一章:操作系统概论
热门文章
- Java POI导出Excel时,合并单元格没有边框的问题
- Navicat Premium 查看密码方案
- HTML情人节表白代码,给女朋友的电子情书代码,女朋友表白代码
- MySQL实现字符串分割split并获取长度
- C++学习从基础到高阶(基于黑马程序员教程)
- jdbc mysql 解密_数据库配置文件jdbc.properties 实现用户名密码加密
- Linux服务器如何做raid1,Linux下制作raid1
- node后台生成srt字幕文件
- 易仓科技×OceanBase:打造跨境行业全生态链的新零售SaaS
- Steam Buff 自动选品 网页版教程