2021-08-14

(五)python对文件的操作

1.文件基本操作(普通读取,上下文语法)

在对文件进行读写操作时,我们会用到python的内置函数open()将文件打开进行相应操作,当我们结束对文件操作时候,需要使用close()来关闭打开的文件以释放资源,避免资源浪费

读文件

#打开文件
file=open(file,mode='r',buffering=None, encoding=None, errors=None, newline=None, closefd=True)
#读取文件,如果读不到数据,read方法返回None
file.read()

​open()中各参数的含义:

file:指定打开的文件名,如果该文件不在当前工作目录下,则需要指定文件路径

mode:指定操作的模式,如下表所示:

‘r’读文件(默认)
‘w’截断写入
‘x’重新创建一个新的文件,打开并写入
‘a’打开文件进行写操作,追加在文件内容结尾
‘t’文本模式(默认)
‘+’打开磁盘文件进行更新(读或写)
‘b’二进制模式

python中,是区分以二进制和文本模式打开文件的,mode默认的是’rt’模式,对于二进制文件的随机访问,'wb’为打开并将文件截断为0字节,'rb’为不截断的打开二进制文件

buffering:可选整数,用于设置缓冲策略。(暂时用处不大)
encoding:用于解码或编码文件的编码名称,只在文本模式下使用, 默认编码取决于平台,也可以传递 Python 支持的任何编码
errors :可选字符串,指定如何处理编码错误,在二进制模式下不使用此参数
newline:换行符控制通用换行符的工作方式(它仅适用于文本模式)。 它可以是 None、’’、’\n’、’\r’ 和 ‘\r\n’。
closefd:如果 closefd 为 False,则在文件关闭时底层文件描述符将保持打开状态。 这在给定文件名时不起作用,并且在这种情况下必须为 True。

读文本文件:
#打开文件
file=open(file='filename.txt',mode='r',encoding='utf-8')
'''如果读不到数据,read方法返回None'''
#先做一次读操作,一次读出16个字符,看是否能读到数据
data=file.read(16)
#使用循环读出所有数据
while data:
    print(data,end='')
    data=file.read(16)
#关闭文件,释放资源
file.close()
读二进制文件:
from io import SEEK_END,SEEK_SET
file=open(file='img.png',mode='rb')
#移动文件指针到文件末尾
file.seek(0,2)     #file.seek(0,SEEK_END)
#通过tell方法查看文件指针移动的字节数,间接的到文件长度即大小
print(file.tell())
#将文件指针移动到文件最开始
file.seek(0,0)    #file.seek(0,SEEK_SET)
try:
    data=file.read(512)  #一般写2的幂次方,512一般是系统分配磁盘空间基本单位
    while data:
        print(data,end='')
        data=file.read()
finally:
    file.close()


​ 读官方解释器文件:

from hashlib import md5, sha256

hasher = md5()  # hasher=sha256()

file = open('python-3.9.6-amd64.exe', 'rb')
try:
    data = file.read(512)
    while data:
        # 更新MD5对象的数据
        hasher.update(data)
        data = file.read(512)
finally:
    file.close()
# 获得十六进制形式的MD5哈希摘要
print(hasher.hexdigest())

写文本文件

#‘w'写操作会覆盖原有的内容
file=open('诗.txt',mode='w',encoding='utf-8')
try:
    file.write('我想做燕子\n')
    file.write('只需要简单的思想\n')
    file.write('不需要复杂的语言\n')
finally:
    file.close()

上下文语法:以上的读写操作中,可以看到,在完成一系列的操作之后,结尾我们都需要使用close()来关闭文件,因此,可以使用上下文语法“with as”,它能够有效管理防止编程过程中,解决对有关资源编程时忘记释放的问题

实例:文件复制/拷贝

def file_copy(source_file,target_file):

    with open(source_file,'rb') as file1:
        with open(target_file,'wb') as target:
            data=file1.read(512)
            while data:
                target.write(data)
                data=file1.read(512)

if __name__ == '__main__':
    file_copy('source_filename.jpg','D:/Note/target_filename.jpg')

实例: 读取、操作csv(逗号分隔符文件)文件

import csv
with open('2018年北京积分落户数据2.csv',encoding='gb18030') as file:                                      reader=csv.reader(file)       
    for row in reader:
        print(reader.line_num)  #拿行号
        print(row)

总结:在读写文件的时候,要注意读写文件的模式,在读写文本文件的时候,还需要注意读写的编码,在操作结束时候,需要关闭文件,以免浪费资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值