Python基础知识-pycharm版(第10节)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、文件创建

1.文本文件

  • 文本文件存储的是普通“字符”文本
  • python 默认为unicode 字符集
  • 两个字节表示一个字符,最多可以表示:65536 个
  • word 软件编辑的文档不是文本文件

2.二进制文件

  • 用“字节”进行存储
  • MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等

3.文件对象创建

基本语法格式: open(文件名[,打开方式])

f = open(r"d:\b.txt","w")

在这里插入图片描述
PS:没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

二、文本文件的写入和读取

1.常用编码

在这里插入图片描述
中文乱码问题是编码与解码不一致

2.写入

  • write(a):把字符串a 写入到文件中
  • writelines(b):把字符串列表写入文件中,不添加换行符
f = open(r"d:\bb.txt","w",encoding="utf-8")
s = ["高淇\n","高老三\n","高老四\n"]
f.writelines(s)
f.close()
  • close()关闭文件流:当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()
    方法),再关闭文件,释放文件对象。
  • with 语句(上下文管理器):自动管理上下文资源,不论什么原因跳出with 块,都能
    确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
s = ["高淇\n","高老三\n","高老五\n"]
with open(r"d:\bb.txt","w") as f:
f.writelines(s)

3.读取

read([size])    #从文件中读取size 个字符,并作为结果返回。如果没有size 参数,则读取整个文件。
                 读取到文件末尾,会返回空字符串。
readline()       #读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
readlines()      #文本文件中,每一行作为一个字符串存入列表中,返回该列表
##为文本文件每一行的末尾增加行号
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)

三、二进制文件的读取和写入

1.文件创建

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

2.文件读写

使用write()、read()实现文件的读写操作

#读取图片文件,实现文件的拷贝
with open('aa.gif', 'rb') as f:
with open('aa_copy.gif', 'wb') as w:
for line in f.readlines():
w.write(line)
print('图片拷贝完成!')

四、文件对象常用属性和方法

1. 属性

在这里插入图片描述
在这里插入图片描述

2. 方法

在这里插入图片描述
在这里插入图片描述

五、文件操作

1.模块概述

在这里插入图片描述

2.序列化和反序列化(pickle和cPickle)

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

pickle.dump(obj, file) obj   #就是要被序列化的对象,file 指的是存储的文件
pickle.load(file)            #从file 读取数据,反序列化成对象
#将对象序列化到文件中
import pickle
with open(r"d:\data.dat","wb") as f:
	a1 = "高淇"
	a2 = 234
	a3 = [20,30,40]
	pickle.dump(a1,f)
	pickle.dump(a2, f)
	pickle.dump(a3, f)
#将获得的数据反序列化成对象
import pickle
with open(r"d:\data.dat","rb") as f:
	a1 = pickle.load(f)
	a2 = pickle.load(f)
	a3 = pickle.load(f)
	print(a1)
	print(a2)
	print(a3)
#######################################
执行结果:
高淇
234
[20, 30, 40]

3.csv文件操作

#  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","高淇",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) #写入多行(数据)

4.os 和os.path 模块

  • os模块
***调用操作系统命令***
import os
os.system("notepad.exe")  #调用windows 系统的记事本程序

import os
os.system("ping www.baidu.com")  #调用windows 系统中ping 命令

import os
os.startfile(r"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe") #直接调用可执行文件:运行安装好的微信
***文件和目录操作***
#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("my02.py"))
##############关于工作目录的操作###############
#print(os.getcwd())
#os.chdir("d:") #改变当前的工作目录为:d:盘根目录
#os.mkdir("书籍")
################创建目录、创建多级目录、删除#############
#os.mkdir("书籍")
#os.rmdir("书籍") #相对路径都是相对于当前的工作目录
#os.makedirs("电影/港台/周星驰")
#os.removedirs("电影/港台/周星驰") #只能删除空目录
#os.makedirs("../音乐/香港/刘德华") #../指的是上一级目录
#os.rename("电影","movie")
dirs = os.listdir("movie")
print(dirs)
#############################
  • os.path模块
#测试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

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

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

6.shutil 模块(拷贝和压缩)

主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

***实现文件的拷贝***
import shutil
#copy 文件内容
shutil.copyfile("1.txt","1_copy.txt")
***实现递归的拷贝文件夹内容(使用shutil 模块)***
shutil.copytree("电影/学习","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))
将文件夹“电影/学习”下面的内容拷贝到文件夹“音乐”下。拷贝时忽略所有的html 和htm 文件。
***实现将文件夹所有内容压缩(使用shutil 模块)***
import shutil
import zipfile
#将"电影/学习"文件夹下所有内容压缩到"音乐2"文件夹下生成movie.zip
#shutil.make_archive("音乐2/movie","zip","电影/学习")
#压缩:将指定的多个文件压缩到一个zip 文件
#z = zipfile.ZipFile("a.zip","w")
#z.write("1.txt")
#z.write("2.txt")
#z.close()
***实现将压缩包解压缩到指定文件夹(使用shutil 模块)***
import shutil
import zipfile
#解压缩:
z2 = zipfile.ZipFile("a.zip","r")
z2.extractall("d:/") #设置解压的地址
z2.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值