2021-02-05Python文件(IO)

1458-Hayden

发表文章数:32

热门标签

首页 » Python » 正文

Python文件

文件分类

按文件中数据组织形式,分为文本文件和二进制文件两大类:

  1. 文本文件
    文本文件存储的是普通“字符”文本,python 默认为unicode 字符集两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开
    但是,像word 软件编辑的文档不是文本文件
  2. 二进制文件
    二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码
    常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等

常用编码介绍

2021-02-05Python文件(IO)
Python程序运行时默认Unicode
windows 操作系统默认的编码是GBK,Linux 操作系统默认的编码是UTF-8
open()时,调用的是操作系统打开的文件,默认的编码是系统编码
f = open(r"b.txt",“w”,encoding=“utf-8”)

Python标准库中的文件操作相关模块

2021-02-05Python文件(IO)

使用pickle序列化

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

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

os和os.path模块

对操作系统进行操作,直接调用操作系统的文件、命令,直接操作文件、目录等

os.system调用系统命令

>>>import os
>>> os.startfile(r"C:/Program Files/XMind/XMind.exe")

os模块文件和目录操作**

文件操作:
2021-02-05Python文件(IO)
目录操作:
2021-02-05Python文件(IO)

# coding=utf-8
# 测试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("test.py"))  # 获取文件信息

# 关于工作目录的操作
print(os.getcwd())
os.chdir("d:")  # 改变当前的工作目录为:d:盘根目录
os.mkdir("subfield")

# 创建目录、创建多级目录、删除
os.mkdir("subfield")
os.rmdir("subfield") #相对路径都是相对于当前的工作目录

os.makedirs("subfield/subsubfield")
os.removedirs("subfield/subsubfield") #只能删除空目录
os.makedirs("../subfield/subsubfield") #../指的是上一级目录
os.rename("subfield","subfolder")
dirs = os.listdir("subfolder")
print(dirs)
walk() 递归遍历所有文件和目录
#coding=utf-8
# dirpath:要列出指定目录的路径
# dirnames:目录下的所有文件夹
# filenames:目录下的所有文件
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(dir)
		all_files.append(os.path.join(dirpath,dir))
	for name in filenames:
		# all_files.append(name)
		all_files.append(os.path.join(dirpath,name))
#打印子目录和子文件
for file in all_files:
	print(file)

os.path模块

2021-02-05Python文件(IO)

#测试os.path 常用方法
import os
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)) #返回元组:目录、文件
('C://Users//Administrator//PycharmProjects//mypro_io//test_os', 'a.txt')
print(os.path.splitext(path)) #返回元组:路径、扩展名
('C://Users//Administrator//PycharmProjects//mypro_io//test_os//a','.txt')
print(os.path.join("aa","bb","cc")) #返回路径:aa/bb/cc
#coding=utf-8
#列出指定目录下所有的.py 文件,并输出文件名
import os
import os.path
path = os.getcwd()
file_list = os.listdir(path) #列出子目录和子文件
for filename in file_list:
	pos = filename.rfind(".")
	if filename[pos+1:]=="py":
		print(filename,end="/t")
		
print("##################")
file_list2 = [filename for filename in os.listdir(path) if filename.endswith(".py") ]
for filename in file_list2:
	print(filename,end="/t")

shutil 模块

shutil 模块是python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作

import shutil
import zipfile

shutil.copyfile("1.txt","1_copy.txt")  #copy 文件内容

shutil.copytree("电影/学习","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))  #将文件夹“电影/学习”下面的内容拷贝到文件夹“音乐”下;拷贝时忽略所有的html 和htm 文件;音乐文件夹需要不存在!!!

z = zipfile.ZipFile("a.zip","w")
z.write("1.txt")
z.write("2.txt")
z.close()  # 压缩:将指定的多个文件压缩到一个zip 文件
shutil.make_archive("音乐2/movie","zip","电影/学习") # 将"电影/学习"文件夹下所有内容压缩到"音乐2"文件夹下生成movie.zip

z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()  # 解压缩

文本文件

文本文件写入

文本文件的写入一般就是三个步骤:

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象
    write(a):把字符串a 写入到文件中
    writelines(b):把字符串列表写入文件中,不添加换行符

open()

open(文件名[,打开方式])

模式 描述
r read
w write;如果文件不存在,则创建;如果文件存在,则重写内容
a append;如果文件不存在,则创建;如果文件存在,则在文件末尾追加内容
b binary;如果没有指定b,则默认文本文件,处理的基本单元是字符;如果设置b,则创建二进制文件对象,处理的基本单元是字节
+ 读、写模式

close()

由于文件底层是由操作系统控制,所以打开的文件对象必须显式调用close()方法关闭文件对象
当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象
为了确保打开的文件对象正常关闭,一般结合异常机制的finally 或者with 关键字实现无论何种情况都能关闭打开的文件对象。
2021-02-05Python文件(IO)

# finally
try:
	f = open(r"my01.txt","a")
	str = "test"
	f.write(str)
except BaseException as e:
	print(e)
finally:
	f.close

# with
with open(r"d:/bb.txt","w") as f:
	f.writelines("test")

文本文件读取

  1. read([size]):从文件中读取size 个字符,并作为结果返回;如果没有size 参数,则读取整个文件;读取到文件末尾,会返回空字符串
  2. readline():读取一行内容作为结果返回,读取到文件末尾,会返回空字符串
  3. readlines():文本文件中,每一行作为一个字符串存入列表中返回该列表
# 迭代器读取
with open(r"d:/bb.txt","r") as f:
	for a in f:
		print(a,end="") # 结尾不打印换行符

enumerate()

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
with open("e.txt","r",encoding="utf-8") as f:
	lines = f.readlines()
	lines = [ line.rstrip()+" #"+str(index+1)+"/n" for index,line in enumerate(lines)] #推导式生成列表
with open("e.txt","w",encoding="utf-8") as f:
	f.writelines(lines)

二进制文件

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

CSV文件

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出
所有值都是字符串,不能定义复杂样式和信息
csv.reader 用于从csv 文件读取数据

import csv
with open(r"d:/a.csv") as a:
	a_csv = csv.reader(a) #创建csv对象,它是一个包含所有数据的列表,每一行为一个元素
	headers = next(a_csv) #获得列表对象,包含标题行的信息
	print(headers)
	for row in a_csv: #循环打印各行内容
		print(row)

csv.writer 对象写一个csv 文件

import csv
headers = ["工号","姓名","年龄"]
rows = [("1001","Jason",18),("1002","Anna",19)] # 也可以使用列表
with open(r"d:/b.csv","w") as b:
	b_csv = csv.writer(b) #创建csv 对象
	b_csv.writerow(headers) #写入一行(标题)
	b_csv.writerows(rows) #写入多行(数据)

文件对象常用方法和属性

常用属性:

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

常用方法:

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

未经允许不得转载:作者:1458-Hayden, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《2021-02-05Python文件(IO)》 发布于2021-02-06

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录