Python文件操作

  • 文本文件和二进制文件
  • 文件操作相关模块
  • open()创建文件对象
  • 文件对象的常用属性和方法
  • pickle 序列化
  • 文本文件读取和写入
    • 文本文件写入步骤
      • write()/writelines()写入数据
      • close()关闭文件流
      • with 语句(上下文管理器)
    • 文本文件的读取
  • 二进制文件读取和写入
  • CSV 文件读取和写入
    • csv模块
      • csv.reader 对象(csv 文件读取)
      • csv.writer 对象( csv 文件写入)
  • os 模块
    • os.system(执行系统命令)
    • os.startfile(直接调用可执行文件)
    • os 模块-文件和目录相关操作
    • os.path 模块
      • walk()递归遍历所有文件和目录
  • shutil 模块(拷贝和压缩)
  • 常用字符编码
    • ASCII
    • ISO8859-1
    • GB2312,GBK,GB18030
      • GB2312
      • GBK
      • GB18030
    • Unicode
    • UTF-8
    • 中文乱码问题

文本文件和二进制文件

  1. 文本文件
    文本文件存储的是普通“字符”文本,可以用记事本程序打开。
  2. 二进制文件
    二进制文件把数据内容用“字节”进行存储,无法用记事本打开。

文件操作相关模块

名称 说明
io 模块 文件流的输入和输出操作input output
os 模块 基本操作系统功能,包括文件操作
glob 模块 查找符合特定规则的文件路径名
fnmatch 模块 使用模式来匹配文件路径名
fileinput 模块 处理多个输入文件
filecmp 模块 用于文件的比较
cvs 模块 用于 csv 文件处理
pickle 和 cPickle 用于序列化和反序列化
xml 包 用于 XML 数据处理
bz2、gzip、zipfile、zlib、tarfile 用于处理压缩和解压缩文件(分别对应不同的算法)

open()创建文件对象

open()函数用于创建文件对象
open(文件名[,打开方式])
为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”

模式 描述
r 读 read 模式
w 写 write 模式。如果文件不存在则创建;如果文件存在,则重写新内容;
a 追加 append 模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容
b 二进制 binary 模式(可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)

文本文件对象和二进制文件对象的创建
没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。
加二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文件对象的常用属性和方法

文件对象属性:

属性 说明
name 返回文件的名字
mode 返回文件的打开模式
closed 若文件被关闭则返回 True

文件对象打开模式:

模式 说明
r 读模式
w 写模式
a 追加模式
b 二进制模式(可与其他模式组合)
+ 读写模式(可以其他模式组合)

文件对象的常用方法:

方法名 说明
read([size]) 从文件中读取 size 个字节或字符的内容返回。若省略[size],则读 取到文件末尾,即一次读取文件所有内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入 列表返回
write(str) 将字符串 str 内容写入文件
writelines(s) 将字符串列表 s 写入文件文件,不添加换行符
seek(offset[,whence]) 把文件指针移动到新的位置,offset 表示相对于 whence 的多少个字节的偏移量; offset:为正往结束方向移动,为负往开始方向移动 whence 不同的值代表不同含义0: 从文件头开始计算(默认值1:从当前位置开始计算 2:从文件尾开始计算
tell() 返回文件指针的当前位置
truncate([size]) 不论指针在什么位置,只留下指针前 size 个字节的内容,其余全 部删除; 如果没有传入 size,则当指针当前位置到文件末尾内容全部删除
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源

pickle 序列化

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他 地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。

使用 pickle 模块中的函数,实现序列化和反序列操作。

序列化&反序列化
pickle.dump(obj, file) obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file) 从 file 读取数据,反序列化成对象

文本文件读取和写入

文本文件写入步骤

写入三个步骤:
1. 创建文件对象
2. 写入数据
3. 关闭文件对象

write()/writelines()写入数据

write(a):把字符串 a 写入到文件中 writelines(b):把字符串列表写入文件中,不添加换行符

close()关闭文件流

打开的文件对象必须显式调用 close()方法 关闭文件对象。当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush() 方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现。

with 语句(上下文管理器)

自动管理上下文资源,不论什么原因跳出 with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。

文本文件的读取

一般如下三种方法:
1. read([size]) 从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。 读取到文件末尾,会返回空字符串。
2. readline() 读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
3. readlines() 文本文件中,每一行作为一个字符串存入列表中,返回该列表

二进制文件读取和写入

二进制文件的处理流程和文本文件流程一致。不过,需要指定二进制模式,从而创建出二进制文件对象。

f = open(r"d:\a.txt", 'wb') #可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt", 'ab') #可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt", 'rb') #可读的二进制文件对象

创建好二进制文件对象后,仍然可以使用 write()、read()实现文件的读写操作。

CSV 文件读取和写入

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel 文件和数据库数据的导入和导出。与 Excel 文件不同,CSV 文件中
1. 值没有类型,所有值都是字符串
2. 不能指定字体颜色等样式
3. 不能指定单元格的宽高,不能合并单元格
4. 没有多个工作表
5. 不能嵌入图像图表

例如:Excel表格:

另存为CSV格式,用记事本打开:
姓名,电话,地址
小明,18889303000,金凤路
小红,18829920000,五原路
王明,16668829922,凤天路

csv模块

Python 标准库的模块 csv 提供了读取和写入 csv 格式文件的对象

csv.reader 对象(csv 文件读取)

import csv
with open(r"e:\a.csv") as a:a_csv = csv.reader(a) #创建 csv对象,它是一个包含所有数据的列表,每一行为一个元素headers = next(a_csv) #获得列表对象,包含标题行的信息print(headers)for row in a_csv: #循环打印各行内容print(row)##print
['姓名', '电话', '地址']
['小明', '18889303000', '金凤路']
['小红', '18829920000', '五原路']
['王明', '16668829922', '凤天路']

csv.writer 对象( csv 文件写入)

import csv
headers = ["工号","姓名","年龄","地址","月薪"]
rows =[("1001","王明",18,"西三旗1号院","50000"),("1002","高八",19,"西三旗 1号院","30000")]
with open(r"d:\b.csv","w") as b:b_csv = csv.writer(b) #创建csv 对象b_csv.writerow(headers) #写入一行(标题)b_csv.writerows(rows) #写入多行(数据)

os 模块

os 模块可以帮助我们直接对操作系统进行操作。

os.system(执行系统命令)

import os
os.system("ping www.baidu.com")

注:可能中文乱码,需要调整IDE编码为GBK

os.startfile(直接调用可执行文件)

#启动微信
import os
os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe")

os 模块-文件和目录相关操作

常用文件操作:

方法名 描述
remove(path) 删除指定的文件
rename(src,dest) 重命名文件或目录
stat(path) 返回文件的所有属性
listdir(path) 返回 path 目录下的文件和目录列表

常见目录操作:

方法名 描述
mkdir(path) 创建目录
makedirs(path1/path2/path3/… ) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2…) 删除多级目录
getcwd() 返回当前工作目录:current work dir
chdir(path) 把 path 设为当前工作目录
walk() 遍历目录树 sep 当前操作系统所使用的路径分隔符
#coding=gbk
#测试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\
print(os.stat("main.py"))##############关于工作目录的操作###############
#注:相对路径都是相对于当前的工作目录
print(os.getcwd()) #当前工作目录
#os.chdir("d:") #改变当前的工作目录为:d:盘根目录
#os.mkdir("书籍".encode("GBK")) #创建目录
#os.rmdir("书籍") #删除目录
#os.makedirs("电影/港台/周星驰") #创多级目录
#os.removedirs("电影/港台/周星驰") #只能删除空目录
#os.rename("电影","movie")
# dirs = os.listdir("movie")
# print(dirs)

os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作。

方法 描述
isabs(path) 判断 path 是否绝对路径
isdir(path) 判断 path 是否为目录
isfile(path) 判断 path 是否为文件
exists(path) 判断指定路径的文件是否存在
getsize(filename) 返回文件的大小 (单位字节)
abspath(path) 返回绝对路径
dirname§ 返回目录的路径
getatime(filename) 返回文件的最后访问时间
getmtime(filename) 返回文件的最后修改时间
walk(top,func,arg) 递归方式遍历目录
join(path,*paths) 连接多个 path
split(path) 对路径进行分割,以列表形式返回
splitext(path) 从路径中分割文件的扩展名
##encoding: utf-8
#测试 os.path 常用方法
import os.path
#################获取目录、文件基本信息
print(os.path.isabs("d:/a.txt")) #是否绝对路径
print(os.path.isdir("d:/a.txt")) #是否目录
print(os.path.isfile("d:/a.txt")) #是否文件
print(os.path.exists("a.txt")) #文件是否存在
print(os.path.getsize("a.txt")) #文件大小
print(os.path.abspath("a.txt")) #输出绝对路径
print(os.path.dirname("d:/a.txt")) #输出所在目录
########获得创建时间、访问时间、最后修改时间##########
print(os.path.getctime("a.txt")) #返回创建时间
print(os.path.getatime("a.txt")) #返回最后访问时间
print(os.path.getmtime("a.txt")) #返回最后修改时间
################对路径进行分割、连接操作############
path = os.path.abspath("a.txt") #返回绝对路径
print(os.path.split(path)) #返回元组:目录、文件
##print ('E:\\PythonProject', 'a.txt')
print(os.path.splitext(path)) #返回元组:路径、扩展名
##print ('E:\\PythonProject\\a', '.txt')
print(os.path.join("aa","bb","cc")) #返回路径:aa/bb/cc

walk()递归遍历所有文件和目录

os.walk()方法:
返回一个 3 个元素的元组(dirpath, dirnames, filenames)
dirpath:要列出指定目录的路径
dirnames:目录下的所有文件夹
filenames:目录下的所有文件

#coding=utf-8
import os
all_files = []
path = os.getcwd()
list_files = os.walk(path)
for dirpath,dirnames,filenames in list_files: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)

shutil 模块(拷贝和压缩)

shutil 模块,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。
os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操 作,这些 os 模块都没有提供。

#encoding=gbk
import shutil
import zipfile
#copy 文件内容
#shutil.copyfile("a.txt","a_copy.txt")#"音乐"文件夹不存在才能用!!!
#文件夹“电影/学习”下面的内容拷贝到文件夹“音乐”下。拷贝时忽略所有的 html 和 htm 文件。
#shutil.copytree("电影/港台","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))#将"电影/港台"文件夹下所有内容压缩到"音乐2"文件夹下生成 movie.zip
#shutil.make_archive("音乐/movie","zip","电影/港台")#压缩:将指定的多个文件压缩到一个 zip 文件
# z = zipfile.ZipFile("a.zip","w")
# z.write("1.txt")
# z.write("2.txt")
# z.close()
#解压缩:
# z2 = zipfile.ZipFile("a.zip","r")
# z2.extractall("d:/") #设置解压的地址
# z2.close()

常用字符编码

ASCII

ASCII 码用 7 位表示,只能表示 128 个字符。一字节 ASCII 的编码最高位总是 0。

ISO8859-1

ISO-8859-1 又称 Latin-1,是一个 8 位单字节字符集,它把 ASCII 的最高 位也利用起来,并兼容了 ASCII,新增的空间是 128,但它并没有完全用完。 在 ASCII 编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语 对应的文字符号,它是向下兼容 ASCII 编码。

GB2312,GBK,GB18030

GB2312

GB2312 全称为信息交换用汉字编码字符集,是中国于 1980 年发布,主要用于计算机系统中的汉字处理。覆盖汉字大部分,不能处理像古汉语等特殊的罕用字, 所以后来出现了像 GBK、GB18030 这种编码。
GB2312 完全兼容 ISO8859-1。

GBK

汉字内码扩展规范,主要是扩展了 GB2312。1995 年制定

GB18030

最新的内码字集于 2000 年发布,主要采用单字节、双字节、四字节对字符编码,它是向下兼容 GB2312 和 GBK 的。用得最多的是 GBK 和 GB2312

Unicode

Unicode 编码设计成了固定两个字节,所有的字符都用 16 位。
Unicode 完全重新设计,不兼容 iso8859-1,也不兼容任何其他编码

UTF-8

对于英文字母,unicode 也需要两个字节来表示。所以 unicode 不便 于传输和存储。因此而产生了 UTF 编码。

UTF 编码兼容 iso8859-1 编码,同时也可以用来表示所有语言的字符, 不过,UTF 编码是不定长编码,每一个字符的长度从 1-4 个字节不等。其中, 英文字母都用一个字节表示,而汉字使用三个字节

中文乱码问题

windows 操作系统默认的编码是 GBK,Linux 操作系统默认的编码是 UTF-8。当我们 用 open()时,调用的是操作系统打开的文件,默认的编码是 GBK

Python文件操作-文本文件、二进制文件、csv文件的读取写入、OS、shutil、CSV模块、常用字符编码相关推荐

  1. python目录及文件操作_python路径及文件操作,10.22,10.27

    csv 和ini文件处理 作者: 一个小菜鸡 csv常见格式 nums     options      arguments 逗号分割值 comma-Separated Values CSV是一个被行 ...

  2. C++文件操作 文本文件 写入

    需要头文件 文件的类型分为两种: 1.文本文件 文件以ASCII码形式存储在计算机中 2.二进制文件 文件以二进制的形式存储在计算机中,用户一般不能直接读懂它们 操作文件的三大类: 1.ofstrea ...

  3. 简述python文件操作的流程_Python文件操作详解

    这篇文章主要介绍了Python 文件操作的详解及实例的相关资料,希望通过本文大家能够理解掌握Python 文件操作的知识,需要的朋友可以参考下 Python 文件操作的详解及实例 一.文件操作 1.对 ...

  4. 文件操作fwrite写txt文件乱码怎么办,我这里有方法解决

    很多大一新生到了期末做课设时,遇到文件操作.总会有人不明白为什么写入的内容会乱码. 先引入一些知识: *文件有二进制文件,文本文件. 二进制文件是按内存写入的: 文本文件是按格式写入的:* 因此二进制 ...

  5. 使用文件操作函数实现:文件的复制功能。

    2019独角兽企业重金招聘Python工程师标准>>> //使用文件操作函数实现:文件的复制功能. #include <stdio.h> #include <std ...

  6. matlab读int16读文件_Matlab文件操作及读txt文件(fopen,fseek,fread,fclose)

    Matlab 文件操作及读 txt 文件 (fopen,fseek,fread,fclose) matlab 文件操作 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将 结果写入数据文件. ...

  7. C# 对Ini文件操作(C# ini文件操作类)

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  8. fclose用法matlab,matlab文件操作及读txt文件(fopen,fseek,fread,fclose

    matlab文件操作及读txt文件(fopen,fseek,fread,fclose) matlab文件操作 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件.MATLAB提 ...

  9. Python常用字符编码(转)

    Python常用字符编码 字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标 ...

最新文章

  1. 熬10天夜,肝出了这个PDF版“软件安装手册”(附下载)
  2. 下属能力很强,却犯了错误,该如何处理?处理不好会出问题
  3. 初步探索创伤性脑损伤后平衡功能障碍的神经机制
  4. 四十四、Mysql的命令和PyMysql
  5. SAP CRM Enterprise Search change pointer的存储数据库表
  6. teamcity_TeamCity工件:HTTP,Ant,Gradle和Maven
  7. PHP将字符串首字母大小写转换
  8. mysql date compare_SQLDataCompare下载
  9. 计算机打印东西怎么横向打印机,打印机横向打印怎么设置,打印机不能横向打印...
  10. tmsf28335的启动步骤
  11. 饥荒控制台输入没用_饥荒代码为什么我输入没反应
  12. 音创linux版e100加歌,麦得好ktv点歌机音创E100-A51,2.42新版本U盘加歌方法
  13. Linux centOS系统备份还原(dd+rsync方式)
  14. 安卓Socket与pc端c#服务器的通信 附完整代码
  15. 透过散射介质的成像matlab,Advanced Photonics|深度神经网络实现透过厚散射介质成像...
  16. 第二型曲线积分的总结思考
  17. 机器学习笔记 - 使用TensorFlow进行音乐生成
  18. Linkage Mapper工具包:ArcGIS中打造连接分析利器的详细指南
  19. 深度学习中的温度参数(temperature parameter)--疑问待解决
  20. 彩色日志,教你配置颜色分明的日志输出。

热门文章

  1. springboot+elasticsearch+bboss框架集成遇到的坑
  2. c语言二级指针与二维数组
  3. Qt部分拉伸的背景图片
  4. mysql 季度统计_mysql 按年度、季度、月度、周、日SQL统计查询
  5. 电脑没有串口怎么办?
  6. 用bat批量重命名不同文件夹下的同名文件
  7. 人工智能 --- Python求解线性和非线性规划问题
  8. 我的 5 年 Android 学习之路,那些年一起踩过的坑
  9. MiKTeX + Texmaker 组合下使.tex文件支持中文的设置方法
  10. 实验吧WEB CTF 猫抓老鼠 全网最简单易懂的解题方法