(补充)第二阶段 -- python的深入与提高:【CSV文件处理】

1. file文件操作;操作系统底层关系;写入文件

1. 文本文;二进制文件

  1. 文本文件:文本文件存储的事普通“字符”文本,默认为Unicode字符集(两个字节表示一个字符,最多可以表示65536个),可以使用记事本程序打开,但是,像Word文件编辑的文档不是文本文件。

  2. 二进制文件:二进制文件把数据内容用“字节”进行存储,无法使用记事本打开。必须用专用的软件解码。常见的有:MP4视频文件,MP3音频文件,JPG图片,doc文档等。

  3. 文件操作相关模块概述

在这里插入图片描述

2. 创建文件对象 open()

  1. open()函数用于创建文件对象,基本语法:

    open(文件名, [打开方式])

  2. 打开方式:

在这里插入图片描述

  • 文本文件对象和二进制文件对象的创建:如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字
    符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。
  1. 基本的文件操作:(三步走)
    1. 创建文件对象
    2. 写入数据
    3. 关闭文件对象
f = open(r'a.text','a')
# 在当前python执行的路径下创建‘a.text’文件
s = 'xxxxxxx'
f.write(s)
f.close()

2. 编码知识;中文乱码问题解决

  • 常用编码介绍

在这里插入图片描述

  • windows 操作系统默认的编码是GBK,Linux 操作系统默认的编码是UTF-8。当我们用open()时,调用的是操作系统打开的文件,默认的编码是GBK。
f = open(r'b.text','w')
f.write('xx\xx\yy')
f.close()
# 文件显示乱码
# 解决方案
f = open(r'b.text','w',encoding='utf-8')
f.write('xx\xx\yy')
f.close()

在这里插入图片描述

3. 关闭流要点;try异常管理

1. write() / writelines()写入数据

  • write(a):把字符串a写到文件中
  • writelines(b):把字符串列表写入文件中,不添加换行符
f = open(r'd:/bb.text','w',encoding='utf-8')
s = ['XX\n','YY\n','ZZ\n'] # 需要手动换行
f.writelines(s)
f.close()

2. close()关闭文件流

  • ​ 由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象。

    ​ 为了确保打开的文件对象正常关闭,一般结合异常机制的finally 或者with 关键字实现无论何种情况都能关闭打开的文件对象。

try:
    f = open(r'my01.text','a')
    str = 'XXXYYY'
    f.write(str)
except BaseException as e:
    print(e)
finally:
    f.close()

3. with语句(上下文管理器)

  • with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
s = ['xx','yy','ii']
with open(r'd:/aa.text','w') as f:
    f.writelines(s)

4. 文本文件的读取

  1. read([size]):从文件中读取size 个字符,并作为结果返回。如果没有size 参数,则读取整个文件。读取到文件末尾,会返回空字符串。

  2. readline():读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。

  3. readlines():文本文件中,每一行作为一个字符串存入列表中,返回该列表。

# 读取前4个字符
try:
    with open(r'e.text','r',encoding='utf-8') as f:
        print(f.read(4))
except BaseException as e:
    print(e)
# 按行读取一个文件
with open(r'e.text', 'r', encoding='utf-8') as f:
    for a in f:
        print(a, end='')

5. enumerate()函数和推导式生成列表;操作每行增加行号

with open(r'e.text', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    lines = [temp.rstrip() + '#' + str(index + 1) + '\n'
             for index, temp in enumerate(lines)]

with open(r'e.text', 'w', encoding='utf-8') as f:
    f.writelines(lines)

6. 二进制文件的读取和写入;图片文件拷贝

  • 二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。例如:

    f = open(r"d:\a.txt", 'wb') #可写的、重写模式的二进制文件对象
    f = open(r"d:\a.txt", 'ab') #可写的、追加模式的二进制文件对象
    f = open(r"d:\a.txt", 'rb') #可读的二进制文件对象

# 把二进制文件“a.gif”拷贝到“aa_copy.gif”
with open(r'aa.gif','rb') as f:
    with open(r'aa_copy.gif','wb') as w:
         for line in f.readlines():
            w.write(line)
print('拷贝完成!')

7. 文件对象常用方法和属性总结;seek()任意位置操作

1. 文件对象常用方法总结

  1. 文件对象的属性
属性说明
name返回文件的名字
mode返回文件的打开模式
closed若文件被关闭则返回True
  1. 文件对象的打开方式
模式说明
r读模式
w写模式
a追加模式
b二进制模式(可与其他模式组合)
+读写模式(可与其他模式组合)
  1. 文件对象的常用方法
方法名说明
read([size])从文件中读取size 个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline()从文本文件中读取一行内容
readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)将字符串str 内容写入文件
writelines(s)将字符串列表s 写入文件文件,不添加换行符
seek(offset[,whence])把文件指针移动到新的位置,offset 表示相对于whence 的多少个字节的偏移量offset:
off 为正往结束方向移动,为负往开始方向移动
whence 不同的值代表不同含义:
0: 从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件尾开始计算
tell()返回文件指针的当前位置
truncate([size])不论指针在什么位置,只留下指针前size 个字节的内容,其余全部删除;如果没有传入size,则当指针当前位置到文件末尾内容全部删除
flush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源

2. seek()任意操作

  • 语法:seek(offset[ ,whence])

  • 参数:

    • 把文件指针移动到新的位置,offset 表示相对于whence 的多少个字节的偏移量offset:

    • off 为正往结束方向移动,为负往开始方向移动

    • whence 不同的值代表不同含义:

      0: 从文件头开始计算(默认值)

      1:从当前位置开始计算

      2:从文件尾开始计算

with open(r'e.text', 'r', encoding='utf-8') as f:
    print('文件名是:%s' % f.name)
    print(f.tell())
    f.seek(3, 0)
    print('读取的内容:{0}'.format(f.readline()))
    print(f.tell())

8. 使用pickle序列化

  1. 序列化:

    ​ Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。对象的序列化机制广泛的应用在分布式、并行系统上。
    ​ 序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。
    ​ 我们可以使用pickle 模块中的函数,实现序列化和反序列操作。

  2. 语法:

    pickle.dump(obj, file):obj是要被序列化的对象,file指得是存储的文件

    pickle.load(file):从file读取数据,反序列化成对象

  • 将对象序列化到文件中
import pickle
with open(r"d:\data.dat","wb") as f:
    a1 = "高淇"
    a2 = 234
    a3 = [20,30,40]
    pickle.dump(a1,f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
    
# 反序列化
with open(r"d:\data.dat","rb") as f:
    a1 = pickle.load(f)
    a2 = pickle.load(f)
    a3 = pickle.load(f)
    print(a1)
    print(a2)
    print(a3)
    
    print(id(a1))
    print(id(b1))

  • 将获得的数据反序列化成对象
import pickle
with open(r"d:\data.dat","rb") as f:
    b1 = pickle.load(f)
    b2 = pickle.load(f)
    b3 = pickle.load(f)
    print(b1)
    print(b2)
    print(b3)
    
    print(id(a1))
    print(id(b1))

9. CSV文件的读取、写入

  1. CSV (Comma Separated Values) 是“逗号”分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与Excel 文件不同,CSV 文件中:

    • 值没有类型,所有值都是字符串

    • 不能指定字体颜色等样式

    • 不能指定单元格的宽高,不能合并单元格

    • 没有多个工作表

    • 不能嵌入图像图表

  2. Python 标准库的模块csv 提供了读取和写入csv 格式文件的对象。

  • csv.reader(f):对象于从csv 文件读取数据
  • csv.writer(f):对象写一个csv 文件
  • 示例:
import csv

# 从csv文件中读数据
with open(r'dd.csv', 'r') as f:
    a_csv = csv.reader(f)
    print(a_csv)
    # print(list(a_csv))
    for row in a_csv:
        print(row)

# 向csv写数据
with open(r'dd.csv', 'w') as f:
    b_csv = csv.writer(f)
    b_csv.writerow(['ID', '姓名', '年龄'])
    b_csv.writerow(['1001', 'zwj', '25'])

    c = [['1002', 'yyy', '22'], ['1003', 'aaa', '22']]
    b_csv.writerow()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值