2020-11-13 Python 文件读写、os模块及递归函数
一、file文件操作
文本文件:存储的是普通字符文本,默认为unicode字符集。可以使用记事本打开
二进制文件:把数据内容用字节进行存储,无法使用记事本打开。
文件模块相关操作:
os模块:基本操作系统,主要为了文件操作
Io模块:文件流的输入和输出操作
cvs模块:用于cvs文件处理
pickle:用于序列化和反序列化
fileinput:处理多个输入文件
创建文件对象 open():f=open(r“path”,“a”)
r:读模式
w:写模式
a:追加模式,文件不存在创建,文件存在,再文件末尾追加内容
b: 二进制模式
如果没有追加b,创建的是文本文件对象,加入b创建的是二进制文件对象,处理的基本单元是字节。
文件的写入步骤:
创建文件对象
写入数据
关闭文件对象
#简单文件的写入步骤
f = open(r"path","a")
s="abc"
f.write(s)
f.close()
二、编码知识
常用编码介绍
ASCII: 表示现代英语及其他西欧语言
兼容 utf-8,gbk。
unicode: 万国码,2个字节表示一个字符。Python默认为unicode。
gbk: 英文一个字节,汉字两个字节。 utf-8:英文一个字节,汉字三个字节。
中文乱码问题
windows默认gbk,linux默认utf-8.当我们打开时,以gbk打开 所以是乱码。
f=open(r“path“,“w”,encoding=“utf-8”)
三、关闭流要点
使用异常机制
write和writelines
writelines:把列表写入文件中,不添加换行符。自己手动换行
close()关闭流
使用finally或者with关键字实现无论何种情况都能关闭打开的文件对象。
#使用异常机制管理文件对象
try:f = open(r"path","a")s="abc"f.write(s)
except BaseException as e:print(e)
finally:f.close()
with上下文管理
with open(r"path",“w”)as f
f.writelines(f)
Note:如果要在一个程序中打开多个文件,f1,f2要区分开。、
四、文本文件的读取
read: 从文件中读取size个字符,不传的话默认读取整个文件。
readline:读取一行内容作为一个结果返回。
readlines:每一行作为一个字符串存入列表,返回该列表。
结构:
with open(r"path","r",encoding=""utf-8) as f:
五、enumerate()函数
#推导式生成列表
'''with open(r"D:\MongoDB\a.txt","w") as f:a="james\njordan\nkobe\n"f.write(a)
'''
with open(r"D:\MongoDB\a.txt","r",encoding="utf-8") as f1:lines=f1.readlines()c=[line.rstrip()+"#"+str(index) +"\n" for index,line in enumerate(lines)]print(c)with open(r"D:\MongoDB\a.txt","w",encoding="utf-8") as f1:f1.writelines(c)
六、二进制文件的读写
wb
ab
rb
七、 文件的拷贝
with open("aa.gif","rb") as f:with open("aacopy.gif","wb") as w:for line in f.readlines():w.write(line)print("图片拷贝完成")
八、文件对象常用属性方法和总结
文件对象的属性:name,mode,closed
文件对象的打开模式: r,w,a,b
文件对象的常用方法:read, readline, readlines, write, writelines(未添加换行符), seek, close.
seek(offset,whence); whence: 0:从文件头开始计算,1:从当前位置开始,2:从尾部开始
#测试seek方法
with open("a.txt","r",encoding="utf-8") as f:print("文件名是:{0}".format((f.name)))print(f.tell()) #打印指针的位置print("读取的内容:{0}".format(f.readline()))print(f.tell())f.seek(3) #偏移print("读取的内容:{0}".format(f.readline()))
九、使用pickle序列化
pickle.dump(obj,file) obj就是要被序列化的对象,file指的是要存储的文件。
pickle.load(file) 从file读取数据,反序列化对象。
import pickle
with open("a.txt","wb") as f:a1="lixuan"a2=234a3=[20,30,40]pickle.dump(a1,f)pickle.dump(a2,f)pickle.dump(a3,f)
#反序列化
import pickle
with open("a.txt","rb") as f:a1=pickle.load(f)a2=pickle.load(f)a3=pickle.load(f)print(a1,a2,a3)
十、csv文件的读写
概念:csv十逗号分隔符文本格式。
只能处理简单字符串
不能嵌入图片
无字体颜色,无单元格宽高设定
#测试csv文件读取和写入
import csv
with open("dd.csv","r") as f:a=csv.reader(f)for row in a:print(row)with open ("ee.csv","w") as f:b_csv=csv.writer(f)b_csv.writerow(["id","name","age"])b_csv.writerow(["01", "lixuan", "20"])
十一、os模块
os调用操作系统文件和命令
os.system 可以帮助我们直接调用系统的命令
os.startfile 直接调用可执行的文件。
os.path模块
isabs:判断绝对路径
isdir: 判断是否为目录
isfile: 判断是否为文件
exists: 判断是否存在
abspath: 返回绝对路径
getsize:返回文件的大小
join:连接多个path
split 对路径进行分割,以列表形式返回
walk 递归遍历目录
#测试os.path。import os#判断
print(os.path.isabs("d:/MongoDB/a.txt"))
print(os.path.isdir("d:/MongoDB/a.txt"))
print(os.path.isfile("d:/MongoDB/a.txt"))
print(os.path.exists("d:/MongoDB/a.txt"))#获得文件基本信息
print(os.path.getsize("d:/MongoDB/a.txt"))
print(os.path.abspath("d:/MongoDB/a.txt"))
print(os.path.dirname("d:/MongoDB/a.txt"))#对路径的操作path=os.path.abspath("a.txt")
print(os.path.split(path)) #将最后一层切出来
print(os.path.splitext(path)) #返回文件扩展品
print(os.path.join(path,"aa")) #将两个路径连接
walk方法遍历所有文件
os.walk() 返回一个三个元素的元组
dirpath
dirnames
filenames
#测试os.walk()import ospath=os.getcwd()
listFiles=os.walk(path)
for dirpath,dirnames,filenames in listFiles:for dir in dirnames:print(dir)for file in filenames:print(os.path.join(dirpath,file))
十二、shutil 模块
文件的拷贝
概念:shutil模块是用来做文件拷贝,移动删除以及压缩解压缩操作
import shutilshutil.copyfile("a.txt","b.txt")#目录的拷贝shutil.copytree("redis","redis1")
文件的压缩和解压缩
import shutil
import zipfile
#压缩文件
shutil.make_archive("redis1/yasuo","zip","redis")#解压缩与压缩z1=zipfile.ZipFile("d:/a.zip","w")
z1.write("a.txt")
z1.close()z2=zipfile.ZipFile("d:/a.zip","r")
z2.extractall("redis1")
z2.close()
十三、递归算法原理
概念:递归结构包括两个部分
本质:直接或间接的调用自己
定义递归头
递归体
遍历一个目录下的所有文件:
#遍历一个目录下所有的文件import osdef listFile(path,sp=""):fileList=os.listdir(path)sp+=" "for fileName in fileList:abs=os.path.join(path,fileName)if os.path.isdir(abs):print(sp+"目录名:",abs)else:print(sp+"文件名:",fileName)path=r"d:/MongoDB"
listFile(path)fileList1=[fileName for fileName in os.listdir(path) if fileName.endswith(".py")]
for f in fileList1:print(f,end="\n")
2020-11-13 Python 文件读写、os模块及递归函数相关推荐
- Python文件处理os模块介绍 -*- Python基础知识12 -*-
文件处理 打开文件 open file mode encoding 操作文件 读取文档 逐个读取read 逐行读取 文件读取位置 写入文档 write 关闭文件 close with... as... ...
- python 文件操作 os模块和shutil模块
转载自:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html ############################## ...
- python文件读写、字典、习题、模块包库、pycharm、面向对象
文件的读写 # #使用open()函数读取文件中的内容filepath='d:/note1.txt'file1=open(filepath) #打开d:/note1.txt open(文件路径,读写模 ...
- python文件读取模式_day-2 python 文件读写模式r,r+,w,w+,a,a+的区别
r+和w+都是可读可写,区别在于r+读文件时,不会覆盖之前的内容,之前的内容能够读出来:w+读时,会覆盖之前的内容:所以读文件时,用r或者r+ #读操作 r 1 filepath = 'aa.log' ...
- seek是python文件操作方法吗,seek引发的python文件读写的问题
我的需求很简单,就是统计一下我的安装脚本执行的次数和时间,格式是这样的 install_times:1|install_times:2018-09-03 15:58:46 install_times: ...
- python异步读写文件_一文彻底搞懂python文件读写
Python文件读写 一,I/O操作 I/O在计算机中是指Input/Output,也就是Stream(流)的输入和输出.这里的输入和输出是相对于内存来说的,Input Stream(输入流)是指数据 ...
- python delimiter分隔符用法_使用Python文件读写,自定义分隔符(custom delimiter)
众所周知,python文件读取文件的时候所支持的newlines(即换行符),是指定的.这一点不管是从python的doucuments上还是在python的源码中(作者是参考了python的io版本 ...
- python 输出文件分隔符_使用Python文件读写,自定义分隔符的方法
使用Python文件读写,自定义分隔符的方法 发布时间:2020-07-06 11:07:56 来源:亿速云 阅读:121 作者:清晨 小编给大家分享一下使用Python文件读写,自定义分隔符的方法, ...
- python数据文件换行输出方法,Python文件读写时的换行符与回车符
Python文件读写时的换行符与回车符 1. 背景知识 ASCII码中的换行符与回车符: 换行符 10 LF '\n' 回车符 13 CR '\r' 在操作系统的历史中,有很多种方法来表示另起一行,但 ...
- python文件传输模块ftplib模块的使用
python文件传输模块ftplib模块的使用 文章目录: 一.ftplib介绍 1.ftplib的简单介绍 2.ftp的API说明 1)ftp登陆连接 2)ftp相关命令操作 二.ftplib实例说 ...
最新文章
- 程序员:提高编程效率的技巧
- 工业互联网企业如何做,才能“赋能万物,连接未来”?
- SQL基础【六、and与or】
- h5封装去底部_干货分享 | 一步一步教你在SpringBoot中集成微信支付H5支付
- 2021HDU多校6 - 7028 Decomposition(构造)
- JavaSE各阶段练习题----集合-Collection-Set-List
- python 字符串操作list【:-1】的几种用法
- JSP(九大内置对象)
- Android ImageView点击效果
- C++小游戏——24点
- 明日之后服务器维修公告维修,《明日之后》排队问题维护进度公告
- 服务器系统部署方案,系统部署方案.doc
- matlab三元方程拟合,3元函数拟合及结果.docx
- PS吸管工具用不了?
- 数字实现千分位分隔符
- (10-4)redis-hash数据类型
- 平面几何中点到直线上的投影计算
- provider: SQL Network Interfaces, error: 26 - 定位指定的服务器/实例时出错
- 国产电流传感器芯片CH701与ACS712的分析对比
- 移动信号e经常无服务器,手机信号差,从4G突然变成“E”?真实原因是这样的!...