python学习(10)-文件处理

文本文件和二进制文件

1 文本文件:用来存储字符的文件,可以用记事本打开,默认使用unicode字符集,像word软件编辑的文档不是文本文件;
2 二进制文件:把数据内容用字节存储,无法用记事本打开,必须使用专用的软件解码,常见的有MP4,MP3,jpg等

python文件操作相关模块

在这里插入图片描述

创建文件对象 open()

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

f
在这里插入图片描述

文本文件的写入

1 创建文件对象
2 写入数据
3 关闭文件对象

f = open("d:/a.txt", "a")
a = "123\n456\n789"
f.write(a)
f.close()

中文乱码问题

windows操作系统默认的编码是GBK,
python 默认的编码是unicode

在pycharm中打开python读写的文件,需要转成GBK编码

关闭流要点

1 try 异常机制

try:
    f = open("a.txt", "a", encoding="utf-8")
    a = "哈哈哈"
    f.write(a)
    f.close()
except BaseException as e:
    print(e)
finally:
    f.close()

2 with语句
不管什么原因跳出with块,都能确保文件正确的关闭

s = ["123\n", "456\n", "789\n"]
with open(r"b.txt", "a") as f:
    f.writelines(s)

文本文件的读取

主要有三个方法:
1 read(size):
从文件中读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件

2 readline()
读取一行内容,读取到文件末尾,会返回空字符串

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

with open("e.txt", "r") as f:
    str = f.read(3)
    print(str)

with open("e.txt", "r") as f:
    for a in f:
        print(a,end="")

练习:文件读取后每行内容后面加行号:enumerate 函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

with open("e.txt", "r") as f:
    line = f.readlines()
    c = [temp.rstrip() + "_" + str(index)+"\n" for index, temp in enumerate(line)] #推导式生成列表
print(c)

with open("f.txt", "w") as w:
    w.writelines(c)

二进制文件读写

f = open(“e.doc”, “wb”) # 可写的,重写模式的二进制文件对象
f = open(“e.doc”, “ab”) # 可写的,追加模式的二进制文件对象
f = open(“e.doc”, “rb”) # 可读的二进制文件对象

# 文件拷贝
with open("123.png", "rb") as f:
    with open("123_copy.png", "wb") as w:
        for a in f.readlines():
            w.write(a)

文件属性

seek 把文件指针移动到新的位置
seek(offset[,whence])
offset表示偏移量 ;
whence:0 从文件头开始计算,默认值;1 从当前文职开始计算;2 从文件尾开始计算
tell 返回文件指针的房钱文职
truncate:不管指针在什么位置,只留下前size个字节的内容

with open("e.txt","r") as f:
    print(f.name)
    print(f.closed)
    print(f.tell())
    print(f.seek(1,0))

序列化和反序列化

使用pickle模块中的函数,实现序列化和反序列的操作
序列化:将对象转换成串行化的数据形式,存储到硬盘活通过网络传输到其他地方;

pickle.dump(obj,file) obj 是要被序列化的对象,file指的是存储的文件
pickle.load(file) 从file读取数据,反序列化成对象

import pickle
#序列化
with open(r"data.dat", "wb") as f:
    a1 = "美女"
    a2 = 123
    a3 = [20, 30, 40]

    pickle.dump(a1, f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
# 反序列化
with open(r"data.dat", "rb") as f:
    b1 = pickle.load(f);
    b2 = pickle.load(f);
    b3 = pickle.load(f)
    print(b1);
    print(b2);
    print(b3)

csv 文件的读写

import csv

#读取
with open("data.csv", "r") as f:
    a_csv = csv.reader(f)
    # print(list(a_csv))
    for a in list(a_csv):
        print(a)
# 写入
with open("ee.csv", "w") as f:
    b_csv = csv.writer(f)
    b_csv.writerow(["id", "name", "age"])
    b_csv.writerow(["1", "LiMing", 10])

    c = [["2", "LiHua", 12], ["3", "Han", 11]]
    b_csv.writerows(c)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值