第四周python的学习总结
对txt/csv/二进制/xlsx/xls/docx/pdf文本的相关读写操作
一.关于文件文本的操作
- 首先了解关于文件的打开:
-
file = open(‘文件目录’,‘相关的操作’,字节编码encoding=‘’)
-
with open(‘文件目录’,‘相关的操作’,字节编码encoding=‘’) as file
这两个都可进行文件的读取写操作:
相关操作:
操作模式 | 具体含义 |
---|---|
'r' |
读取 (默认) |
'w' |
写入(会先截断之前的内容),没有文档会产生新的文档 |
'x' |
写入,如果文件已经存在会产生异常 |
'a' |
追加,将内容写入到已有文件的末尾,会有新的文档 |
'b' |
二进制模式 |
't' |
文本模式(默认) |
'+' |
更新(既可以读又可以写) |
- 怎样知道系统文件的编码
import sys
print(sys.getdefaultencoding())
一般系统默认的是utf-8编码。
3.如果打开代码失败,会产生异常,那怎样来捕获:
try … except,try … finally,和一些else,还有raise关键字组成的代码,是代码具有健壮性和容错性
file = open('resources/致橡树.txt', 'r', encoding='utf-8')
try:
# 如果读不到数据,read方法会返回None
data = 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方法会返回None
data = file.read(32)
while data:
print(data, end='')
data = file.read(32)
finally:
file.close()
还可以对图片进行相关的文件操作
from io import SEEK_END, SEEK_SET
file = 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,sha256
hasher = 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 csv
with 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