1、文件的类型
文本文件:存储字符文本,可以通过记事本打开
二进制文件:数据内容以字节进行存储,无法用记事本打开
2、open创建文件对象:
open(文件名,[打开方式]),文件名可以是文件的绝对路径也可以是相对路径。打开方式包括r(只读)、w(写模式,创建文件或覆盖同名文件)、a(创建文件或追加到文件末尾),b(二进制模式)、+(读写模式)可以与前述模式同时使用。如果为‘b’模式,创建的是二进制文件对象,处理的单元是字节,否则创建的是文本文件对象,处理的单元是字符。
3、文本文件的写入操作包括三个步骤:
创建文件对象、写入数据、关闭文件对象
f=open(r'D\a.txt','a')
s='aaaa'
f.write(s)
f.close
4、编码
python默认使用utf-8编码,window操作系统默认使用GBK编码,python写入文件到操作系统默认使用GBK编码,可以通过encoding参数修改编码类型。在python中打开文件中的中文字符会显示乱码,需修改编码为GBK。
write()可以写入字符串到文件,writelines()可以写入列表内容(不含换行符)到文件。
5、close()、with
close()释放资源,首先将缓冲区数据写入文件(flush()实现一样的效果),再关闭文件,释放文件对象。
with关键字可以实现自动地上下文资源的管理,无论是否发生异常,文件都会关闭
6、文本文件读取:
在‘r’模式下,f.read(字符数)读取文件的指定数量的字符,默认读取全部字符。f.readline()读取一行作为结果放回,包括换行符,读取到文件末尾会返回空字符串。f.readlines()每一行作为字符串存入列表(末尾包括换行符),返回该列表。enumerate返回一个可迭代对象,list(enumerate(a))生成列表[(0,列表元素0),(1,列表元素1)…,(n,列表元素n)]。
##f=['aaa\n','bbb\n','ccc\n']
with open('111.txt','r',encoding="utf-8") as f:
e=enumerate(f.readlines())
a=[ value.strip()+'#'+str(index)+'\n' for index,value in e ]
with open('111.txt','w',encoding="utf-8") as f:
f.writelines(a)
实现二进制文件的复制:读取和写入
with open('111.gif','rb',encoding="utf-8") as f:
with open('222.gif', 'wb', encoding="utf-8") as w:
for line in f.readlines():
w.write(line)
print('图片拷贝完成')
7、seek、tell
f.seek(offset[,whence])offset表示偏移量,whence为0表示从头开始,为1表示从当前位置开始,为2表示从末尾开始,每一行开头占一个字节,汉字在utf-8占3个字节,在gbk占2个字节。f.tell()显示当前指针所在的位置。
8、pickle序列化、反序列化
pickle.dump(对象,文件对象写模式)序列化将内存的对象转化为串行化数据对象存储到硬盘中,对象=pickle.load(文件对象读模式)反序列将读取到的串行化数据转化成对象,序列化与反序列化的顺序相同,值相同,但不是同一个对象
9、csv读写
import csv
with open(r'a.csv','w',newline='') as w:
b=csv.writer(w)
b.writerow(['a','b','c'])##写入一行a,b,c
l=[('a', 'b', 'c'),('a1', 'b1', 'c1')]##写入一行a,b,c一行a1,b1,c1
b.writerows(l)
with open(r'a.csv','r') as f:
a = csv.reader(f)###创建 csv 对象,只能遍历一次
#l=list(a)##由每一行生成的列表为元素,列表的列表
for row in a: #循环打印各行
print(row)
10、os模块
os模块涉及操作系统相关的操作。os.system(‘’)可以直接调用操作系统命令,os.startfile(‘’)直接调用可执行文件。
os.name:操作系统类型
os.sep:分割符
os.stat(文件名):文件信息
os.getcwd():获取当前工作目录
os.chdir(“d:”):修改工作目录
os.mkdir(“书籍”):创建目录,相对路径都是相对当前目录
os.rmdir(“书籍”):删除目录,目录必须为空目录,
os.makedirs(“电影/港台/周星驰”):创建多级目录
os.makedirs(“…/音乐/香港/刘德华”):…/指的是上一级目录
os.removedirs(“电影/港台/周星驰”):删除多级目录
os.rename(“电影”,“movie”):重命名
os.listdir(“movie”):列出目录下的一级目录和文件
11、os.path模块
os.path模块涉及对目录相关的操作
os.path.isabs(“d:/a.txt”):是否绝对路径
os.path.isdir(“d:/a.txt”):是否目录
os.path.isfile(“d:/a.txt”):是否文件
os.path.exists(r"a.txt"):目录或文件是否存在,r表示非转义的原始字符串
os.path.getsize(“a.txt”):文件大小
os.path.abspath(“a.txt”):获取绝对路径
os.path.dirname(“d:/a.txt”) :获取目录名称,获得‘d:/’
os.path.getctime(“a.txt”):获取创建时间,毫秒
os.path.getatime(“a.txt”):获取最后访问时间,毫秒
os.path.getmtime(“a.txt”):获取最后修改时间,毫秒
os.path.split(path):生成元组:(文件路径,文件名+扩展名)
os.path.splitext(path):生成元组:(文件路径+文件,扩展名)
os.path.join(“aa”,“bb”,“cc”):生成文件路径aa\bb\cc
打印目录下所有的py文件:
import os
a=[file for file in os.listdir() if file.endswith('py')]
os.walk(绝对路径):返回一个可迭代对象,包含所有目录、子目录的路径、目录下所有文件夹、目录下所有文件。
打印所有文件、子目录:
import os
print(os.getcwd())
all_files=[]
for dirpath,dirname,filename in os.walk(os.getcwd()):
print(dirpath)##str,含目录、子目录
print(dirname)##list,dirpath单个目录下所有文件夹
print(filename)##list,dirpath单个目录下所有文件
print()
for dirname1 in dirname:
all_files.append(os.path.join(dirpath,dirname1))
for filename1 in filename:
all_files.append(os.path.join(dirpath, filename1))
for file in all_files:
print(file)
12、shutil模块
shutil用于拷贝移动删除、文件或文件夹的压缩和解压
shutil.copyfile(“1.txt”,“1_copy.txt”):拷贝文件
shutil.copytree(源文件夹目录,新文件夹目录,ignore=shutil.ignore_patterns(‘*.txt’,‘*.html’)):拷贝文件夹,新文件夹目录不存在才可创建成功,ignore表示不拷贝txt、html文件。
压缩文件:shutil.make_archive(“音乐2/movie”,“zip”,“电影/学习”)将文件夹电影/学习压缩生成movie.zip。
zipfile压缩将两个文件压缩生成a.zip
z=zipfile.ZipFile(‘a.zip’,'w')
z.write('1.txt')
z.write('2.txt')
a.close()
zipfile解压到d:/
z=zipfile.ZipFile(‘a.zip’,'r')
z.extractall('d:/')##解压路径
a.close()
13、递归:
定义递归头–什么时候不调用自己,定义递归体–什么时候调用自己
阶乘运算
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
print(factorial(5))