Python 常见的文件 IO操作

什么是文件IO?

文件IO: 通过程序操作计算中文件内容数据的一种技术

文件: 泛指计算机硬盘上的文件
I: input,输入,表示程序中读取文件中的内容
O:output,输出,表示程序中的数据输出/保存到文件中

文件的分类

  • 基于文件的用途,文件表象上的宏观分类:

    • 文本文档,视频文件,音频文件,图片文件,word文档
  • 基于文件的组成,文件底层的数据组织方式

    • 文本文件:底层是字符数据组成的,使用记事本软件正确打开文件内容
    • 二进制文件:底层是字节数据组成的,使用记事本软件打开出现乱码的文件

open() 函数

open()函数是 python提供的内建函数,专门用于操作文件内容的一个功能函数

参数 file:第一个参数,描述的要打开的文件,可以是绝对路径,也可以是相对路径
参数 mode:第二个参数,描述打开文件的方式,也称为操作文件的权限
参数 encoding:描述操作文本文件的编码方式

mode参数指定的权限(r,w,x,a,b,t,+

rt :文件的默认打开方式,读取文本文件内容,可以省略
wt :覆盖写入文本文件,可以省略 t
at :追加写入文本文件,可以省略 t
rb : 读取二进制文件内容
wb :覆盖写入二进制文件
ab : 追加写入二进制文件

操作文本内容

读取文本内容

# 打开文件
file = open("cs.txt", "r", encoding="utf-8")
# 读取内容,打印
content = file.read()
print(content)
# 关闭文件
file.close()

写入字符到文本文件

# 打开文件
file = open("cs.txt", "r", encoding="utf-8")
# 写入字符数据
file.write("你好,世界!")
# 关闭文件
file.close()

操作二进制文件

读取二进制数据

# 1. 打开文件,以二进制的方式读取(二进制文件不需要设置字符编码)
file = open("mm.jpg", "rb")
# 读取数据
content = file.read()
print(content)
# 关闭文件
file.close()

写入二进制数据

# 字符数据
msg = "你好,世界!"
# 以二进制方式打开文件
file = open("text.dat", "wb")
# 写入字节数据(可以通过编码方式将字符数据转换为字节数据)
file.write(msg.encoding("UTF-8"))
file.close()

大文件的复制(二进制文件)

文件内容较多,体积较大的文件的复制操作,涉及到文件内容的读取和写入操作。

二进制文件执行read()方法时 :一次性将所有数据读取到内存中(文件体积较大,读取文件相当耗费内存!)

read([size]) 此时可以指定每次读取的数据大小,单位字节;如每次读取 1024字节–>1K 数据。

如果进行大文件的复制,需要循环读取文件内容数据,最终完成文件的所有内容复制粘贴!

"""大文件的复制操作"""
def file_copy(old_path, new_path):
    # 以读取方式打开 原路径
    old_file = open(old_path, "rb")
    # 以写入方式打开 新路径
    new_file = open(new_path, "wb")
    # 设置每次读取的数据大小 设置为 10M
    buffer = 1024 * 1024 * 10

    while True:
        # 循环读取,每次读取 10M 大小数据
        content = old_file.read(buffer)
        # 如果读取到的内容为空,则说明已经读取完
        if content == b"":
            print("读取完毕!")
            break
        # 写入新文件
        new_file.write(content)
    print("复制完成!")

file_copy(原文件,拷贝到的位置)

程序中数据的保存

计算机中的文件存储的时字符数据或者字节数据,对应了程序代码中的字符数据和字节数据,但是程序中还有其它类型的数据,如列表,字典等等,这些数据存储到文件中时,应该怎么处理?

**解决方法:**将程序中其它类型的数据,转换成字符数据或者字节数据进行操作

字符操作方式

Python语法中提供了 json模块,可以将程序中的各种类型的数据转换成类似字典格式的字符串数据,称为json数据

  • json.dump(obj,fp) 将程序中的一个对象数据(列表,字典等等)写入到一个打开的文件中
  • json.load(fp) 将文件中的内容,转换成 python中的对应的对象数据

1. 将数据保存到文本文件中

import json

dct1 = {
    "name": "zong",
    "pwd": "zong"
}

dct2 = {
    "name": "admin",
    "pwd": "admin"
}

lst = [dct1, dct2]
file = open("./cs.txt","w",encoding="utf-8")
json.dump(lst, file)
file.close()

2. 将文本文件中的数据读取到程序中

import json

file = open("./cs.txt", "r", encoding="utf-8")
lst = json.load(file)
print(lst)
file.close()

字节操作方式

Python语法中提供了 pickle 模块,用于程序中的数据有组织的保存到二进制文件中

  • dump(obj,fp) 将程序中的一个对象数据(列表,字典等等),写入到一个二进制文件中
  • load(fp) 将文件中的字节数据,转换成python中对应的对象数据

1. 保存数据到文件中

import pickle

dct1 = {
    "name": "zong",
    "pwd": "zong"
}

dct2 = {
    "name": "admin",
    "pwd": "admin"
}

lst = [dct1,dct2]

file = open("cs.dat","wb")
pickle.dump(lst,file)
file.close()

2. 从文件中读取数据

import pickle

file = open("./cs.zong","rb")
lst = pickle.load(file)
print(lst)
file.close()

小结

上述 json模块 和 pickle模块,都只能在一个文件中操作一个对象数据,当然我们也可以将多个对象数据包含在一个列表容器中,解决存储多个数据的问题。

Python中同样提供了其它的操作模块可以非常友好的完成数据的交互,如 marshal模块可以序列化多个数据,shelve模块可以按照字典的方式组织序列化数据等等

csv模块

csv文件时按照行列式 存储数据的一种方式,是一个文本文件,可以使用 excel软件直接打开希纳是为表格格式,Python中提供了一个 csv模块用于专门操作 csv文件

import csv
dir(csv)
['excel', 'excel_tab', 'field_size_limit', 'get_dialect', 'list_dialects', 're', 'reader', 'register_dialect', 'unix_dialect', 'unregister_dialect', 'writer']

存储数据到csv文件

import csv

file = open("text.csv", "w", newline="", encoding="UTF-8-sig")
# 获取csv的writer对象
writer = csv.writer(file)
# 写入标题
writer.writerow(["姓名", "年龄", "性别", "邮箱"])

# 写入多行数据
writer.writerows([
    ["tom", "18", "男", "[email protected]"],
    ["jimi", "21", "男", "[email protected]"],
])

file.close()

读取csv文件中的数据

import csv

file = open("text.csv", "r", encoding="UTF-8-sig")
reader = csv.reader(file)
for row in reader:
    print(row)

file.close()
发布了44 篇原创文章 · 获赞 5 · 访问量 2388

猜你喜欢

转载自blog.csdn.net/qq_36078992/article/details/105716059