第四周python的学习总结
对txt/csv/二进制/xlsx/xls/docx/pdf文本的相关读写操作
一.关于文件文本的操作
- 首先了解关于文件的打开:
-
file = open(‘文件目录’,‘相关的操作’,字节编码encoding=‘’)
-
with open(‘文件目录’,‘相关的操作’,字节编码encoding=‘’) as file
这两个都可进行文件的读取写操作:
相关操作:
操作模式 | 具体含义 |
---|---|
'r' |
读取 (默认) |
'w' |
写入(会先截断之前的内容),没有文档会产生新的文档 |
'x' |
写入,如果文件已经存在会产生异常 |
'a' |
追加,将内容写入到已有文件的末尾,会有新的文档 |
'b' |
二进制模式 |
't' |
文本模式(默认) |
'+' |
更新(既可以读又可以写) |
- 怎样知道系统文件的编码
import sysprint(sys.getdefaultencoding())
一般系统默认的是utf-8编码。
3.如果打开代码失败,会产生异常,那怎样来捕获:
try … except,try … finally,和一些else,还有raise关键字组成的代码,是代码具有健壮性和容错性
file = open('resources/致橡树.txt', 'r', encoding='utf-8')
try:# 如果读不到数据,read方法会返回Nonedata = file.read(32)while data:print(data, end='')data = file.read(32)
finally:file.close()
file = None
try:file = open('致橡树.txt', 'r', encoding='utf-8')print(file.read())
except FileNotFoundError:print('无法打开指定的文件!')
except LookupError:print('指定了未知的编码!')
except UnicodeDecodeError:print('读取文件时解码错误!')
finally:if file:file.close()
如果try捕获的语句没有出错,就会继续执行try下面的代码,最后执行finally语句,finally后面是关闭文件file.close().
- 最后用file.close()关闭文件。
file = open('resources/致橡树.txt', 'r', encoding='utf-8')
try:# 如果读不到数据,read方法会返回Nonedata = file.read(32)while data:print(data, end='')data = file.read(32)
finally:file.close()
还可以对图片进行相关的文件操作
from io import SEEK_END, SEEK_SETfile = open(file='resources/guido.jpg', mode='rb')
# 如果希望获得文件的字节数,可以先用seek方法将文件指针移动到文件末尾
# 然后通过tell方法获取文件指针移动的字节数,这个字节数就是文件的大小
file.seek(0, SEEK_END)
print(file.tell())
# 将文件指针移动到文件最开始的位置
file.seek(0, SEEK_SET)
try:# 读取字节的长度,一般都是2**n的次方data = file.read(512)while data:print(data, end='')data = file.read(512)
finally:file.close()
运用的知识点
- form io import SEEK_END,SEEK_SET导入该模块可以得到指针的操作,文件的末尾和前面。
- file.seek(0, 2)指针从开始走到末尾,相当于指针的操作,file.seek(0,SEEK_END)也是一样的含义。
- file.seek(SEEK_END, SEEK_SET)从文件的末尾走到前端。
- file.tell()可以的值文件的位置。
from hashlib import md5,sha256hasher = md5()
hasher2 = sha256()
file = open('data/python-3.9.6-amd64.exe')
try:data = file.read(512)while data:# 更新MDS对象数据hasher.update(data)hasher2.update(data)data = file.read(512)
except:print()
finally:file.close()# 获得十六进制形式的MDS哈希摘要
print(hasher.hexdigest())
print(hasher2.hexdigest())
进行文件写操作:
with open('data/小雨康桥的诗.txt',mode='r+',encoding='utf-8') as file:file.seek(0,2)file.write('喜羊羊')file.close()
- 打开文件后,用file.write()来添加内容.
二.读取csv文件
import csvwith open('data/2018年北京积分落户数据.csv',encoding='gb18030') as file:# delimiter ---> 设置分隔符(默认英文的逗号)# quotechar ---> 包裹字符串的符号(默认是英文的双引号)content=csv.reader(file,delimiter='#',quotechar='"') #declimiter默认逗号for row in content:print(row)
- 默认的分割符delimiter=‘’,一般都是逗号,可以指定是否为句号。
- quotechar=’'包裹字符串的符号,默认是英文的双引号。
- csv.reader()读取出来的是一个列表。
对csv进行读写操作
CSV文件有以下特点:
- 纯文本,使用某种字符集(如ASCII、Unicode、GB2312)等);
- 由一条条的记录组成(典型的是每行一条记录);
- 每条记录被分隔符(如逗号、分号、制表符等)分隔为字段(列);
- 每条记录都有同样的字段序列。
with open('data/temperature.txt',encoding='utf-8') as file1:with open('data/result.csv',mode='w',encoding='GBK',newline='') as file2:writer = csv