0


Python从入门到精通,100天就够了!(11)——办公自动化(1)文件读写

文章目录

读写文本文件

读文本文件

在Python中,我们通过

open

函数来打开文件。使用

open

函数时,通过指定

文件名``操作模式``字符编码

等信息,达到怎样打开文件和怎样读写。
完整语法为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

操作模式具体含义

'r'

读取 (默认)

'w'

写入(会先截断之前的内容)

'x'

写入,如果文件已经存在会产生异常

'a'

追加,将内容写入到已有文件的末尾

'b'

二进制模式

't'

文本模式(默认)

'+'

更新(既可以读又可以写)
这张表就是操作模式的方法解释,下面我们来看具体例子。

file=open(file='resources/致橡树.txt', mode='r', encoding='utf-8')
data =file.read()print(data, end='')file.close()

首先使用

open

函数创建一个名为file的对象,指定打开文件为

file='D:/Python/resources/致橡树.txt'

,对文件操作模式为

mode='r'

,字符编码为

encoding='utf-8'

。对

file对象

使用

read()

方法,再把读到的内容打印出来。最后再关闭文件。

除了使用文件对象的

read

方法读取文件之外,还可以使用

for-in

循环逐行读取或者用

readlines

方法将文件按行读取到一个列表容器中,代码如下所示。

import time

file=open('resources/致橡树.txt','r', encoding='utf-8')for line infile:print(line, end='')
    time.sleep(0.5)file.close()file=open('resources/致橡树.txt','r', encoding='utf-8')
lines =file.readlines()for line in lines:print(line, end='')
    time.sleep(0.5)file.close()
写文本文件

如果要向文件中写入内容,可以在打开文件时使用

w

或者

a

作为操作模式,

w

会截断之前的文本内容写入新的内容,

a

是在原来内容的尾部追加新的内容。

file = open('resources/致橡树.txt', 'a', encoding='utf-8')
file.write('\n标题:《致橡树》')
file.write('\n作者:舒婷')
file.write('\n时间:1977年3月')
file.close()

也可以使用下面的代码来完成相同的操作。

lines = ['标题:《致橡树》', '作者:舒婷', '时间:1977年3月']
file = open('resources/致橡树.txt', 'a', encoding='utf-8')
for line in lines:
    file.write(f'\n{line}')
file.close()

上下文语法

在上面的使用中,我们既需要写打开文件,还需要写关闭文件的代码,这是很麻烦的事情。我们可以使用

with

上下文语法在文件操作完成后自动执行文件对象的

close

方法,这样可以让代码变得更加简单。使用方法如下:

withopen('resources/小雨康桥的诗.txt', mode='a', encoding='utf-8')asfile:file.write('我做不成燕子\n')file.write('所以我飞不过感情的墙\n')file.write('我做不成树\n')file.write('因此也撑不破伤心的网\n')

读写二进制文件

读写二进制文件跟读写文本文件的操作类似,但是需要注意,在使用

open

函数打开文件时,如果要进行读操作,操作模式是

'rb'

,如果要进行写操作,操作模式是

'wb'

。还有一点,读写文本文件时,

read

方法的返回值以及

write

方法的参数是

str

对象(字符串),而读写二进制文件时,

read

方法的返回值以及

write

方法的参数是

bytes-like

对象(字节串)。下面的代码实现了将当前路径下名为

guido.jpg

的图片文件复制到

吉多.jpg

文件中的操作。

with open('resources/guido.jpg', 'rb') as file1:
data = file1.read()
with open('resources/吉多.jpg', 'wb') as file2:
file2.write(data)

如果要复制的图片文件很大,一次将文件内容直接读入内存中可能会造成非常大的内存开销,为了减少对内存的占用,可以为

read

方法传入

size

参数来指定每次读取的字节数,通过循环读取和写入的方式来完成上面的操作,代码如下所示。

with open('resources/guido.jpg', 'rb') as file1, open('resources/吉多.jpg', 'wb') as file2:
data = file1.read(512)
while data:
    file2.write(data)
    data = file1.read(512)

读取Python官方解释器文件,计算md5哈希码

下面我们进行练习,读取二进制文件。读取Python官方解释器文件,计算md5哈希码。我们将读出的md5哈希码和官网上的进行比对,这样就知道我们下载的Python官方解释器是否被恶意篡改。

import hashlib

hasher = hashlib.md5()withopen('resources/python-3.9.6-amd64.exe','rb')asfile
data =file.read(512)while data:# 更新MD5对象的数据
    hasher.update(data)
    data =file.read(512)# 获得十六进制形式MD5哈希摘要print(hasher.hexdigest())#ac25cf79f710bf31601ed067ccd07deb

通过对比,我们计算出来和官网给出的md5哈希码一致,说明我们的解释器没有问题。

将100以内的质数输出到文件中每行一个数。

代码如下:

withopen('resources/100以内的质数.txt', mode='a', encoding='utf-8')asfile:for num inrange(2,101):for i inrange(2, num+1):if num % i ==0:breakif num == i:file.write(f'{str(num)}\n')

请添加图片描述

标签: python

本文转载自: https://blog.csdn.net/Z_YingC/article/details/119701431
版权归原作者 Z_YingC 所有, 如有侵权,请联系我们删除。

“Python从入门到精通,100天就够了!(11)——办公自动化(1)文件读写”的评论:

还没有评论