10、python文件处理

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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值