Python中的IO文件操作

Python中的IO文件操作

一 、常用文件操作
操作方式解释
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
+读写方式,可以写入数据,可以读取数据
二 、案例说明
1. 基本操作
  • 将程序中的数据写到文件中
file = open('./data/1.1.text', 'w', encoding='utf-8')
message = 'hello 世界'
file.write(message)
file.close()
  • 将程序中的数据读出来
file = open(file='./data/1.1.text', mode='r', encoding='utf-8')
info = file.read()
print(info)
file.close()
# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
C:\Python37\python.exe E:/PY1901_0114WORK/days11/demo01_IO文件操作.py
hello 世界
  • 文本文件的追加
file = open(file='./data/1.2.text', mode='a', encoding='UTF-8')
# 要操作的文本数据
message = '白日依山尽'
file.write(message)
message = '\n黄河入海流'
file.write(message)
message = '\n欲穷千里目'
file.write(message)
message = '\r更上一层楼'
file.write(message)
file.close()
# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
白日依山尽
黄河入海流
欲穷千里目
更上一层楼二进制文件的操作
  • 二进制文件的操作
# C:\Users\Administrator\Pictures/timg1.jpeg
# 读取计算机中的二进制文件数据
file = open(file='C:/Users/Administrator/Pictures/timg1.jpeg', mode='rb')
print(file.read())
file.close()

# 将数据重新存储到我们制定的位置
file2 = open(file='./data/test.jpeg', mode='wb')
file2.write(file.read())
file2.close()
  • 重要: 文件的快捷操作: with语法
# 外层表示的是读,内层表示的是写,不用关闭流
with open('C:/Users/Administrator/Pictures/skyload.jpg', 'rb') as file1:
    with open('./data/' + file1.name[file1.name.rfind('/'):], 'wb') as file2:
        file2.write(file1.read())
2. 类型转换和eval函数
  • 写入数据
# 基本数据类型,组合数据类型
# 1. 将程序中的字典类型数据,转换成字符串存储到文件中
users = {'admin': {'username': 'admin', 'password': '123', 'nickname': '南易'}}

users_str = str(users)

with open('./data/2.1.text', 'w') as file:
    file.write(users_str)
  • 读取数据
# 2. 将文件中的字符串数据, 读取到程序中
with open('./data/2.1.text', 'r') as file:
    users = file.read()
    print(users, type(users))
    # 将字符串数据, 转换成字典: 该字符串的格式和python中的字典的表达式一致
    users = eval(users)
    print(users, type(users))
    print(users.get('admin'))
# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
C:\Python37\python.exe E:/PY1901_0114WORK/days11/demo02_类型转换和eval函数.py
{'admin': {'username': 'admin', 'password': '123', 'nickname': '南易'}} <class 'str'>
{'admin': {'username': 'admin', 'password': '123', 'nickname': '南易'}} <class 'dict'>
{'username': 'admin', 'password': '123', 'nickname': '南易'}
3. json模块的数据操作
  • 写入数据
'''
python中提供一个特殊的模块, 可以直接对python
    中的数据进行序列化操作
        序列化: 按照指定的数据顺序定义数据格式[类似编码]
'''
import json

# 准备操作的数据
users = {'admin': {'username': 'admin', 'password': '123', 'nickname': 'MrBean'}}
# 1. 将程序中的数据,直接存储到文件中
# json模块的操作
with open('./data/3.1.json', 'w') as file:
    json.dump(users, file)
  • 读取数据
# 2. 将文件中的数据, 读取到程序中
with open('./data/3.1.json', 'r') as file:
    users = json.load(file)
    print(users, type(users))
# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
C:\Python37\python.exe E:/PY1901_0114WORK/days11/demo03_json模块.py
{'admin': {'username': 'admin', 'password': '123', 'nickname': 'MrBean'}} <class 'dict'>

4. marshal操作多个数据
  • 写入数据
# 数据准备
s = '字符串'
i = 10
f = 3.141592653589793
b = True
c = 12 + 5j
l = [1, 2, 3]
d = {'username': 'admin', 'password': '123'}
# 将上边的数据存储在列表中
x = [s, i, f, b, c, l, d]

# 存储多个数据的模块: marshal
import marshal

# 1. 存储多个数据到文件中
with open('./data/4.1.dat', 'wb') as file:
    # 第一次存储一个数量: 有多少个数据存储到了文件
    marshal.dump(len(x),file)
    # 存储每个数据
    for x1 in x:
        marshal.dump(x1, file)
  • 读取数据
# 2. 将多个数据从文件中一次去除
with open('./data/4.1.dat', 'rb') as file:
    n = marshal.load(file)

    # 将所有数据一次取出
    for x in range(n):
        print(marshal.load(file))
# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
字符串
10
3.141592653589793
True
(12+5j)
[1, 2, 3]
{'username': 'admin', 'password': '123'}
5. shelve操作多个数据
  • 写入和读取数据
# 数据准备
users = {'admin': {'username': 'admin', 'password':'123', 'nickname': 'MrBean'}}
articles = {'标题': {'title': '标题', 'content': '文章内容', 'author': users['admin']}}

import shelve

file = shelve.open('./data/5.1')

# 1. 将多个数据按照key:value的形式存储到文件中
file['users'] = users
file['articles'] = articles

# 读取数据
print(file['users'], type(file['users']))
print(file['articles'], type(file['articles']))

# ^_^ __ ^_^ __ ^_^ __ ^_^ _风骚的分割线_ ^_^ __ ^_^ __ ^_^ __ ^_^ 
# 输出结果
C:\Python37\python.exe E:/PY1901_0114WORK/days11/demo05_shelve.py
{'admin': {'username': 'admin', 'password': '123', 'nickname': 'MrBean'}} <class 'dict'>
{'标题': {'title': '标题', 'content': '文章内容', 'author': {'username': 'admin', 'password': '123', 'nickname': 'MrBean'}}} <class 'dict'>

小结:

python存取多个数据到文件中
如果按常规方式-open/write/read方式, 每个独立的数据都要单独存储一个文件
  1. str()数据: 字符串:文件存储-->文件读取:eval(): 数据
    2. 数据: json.dump(): 文件存储->json.load():数据

如果要存储多个数据到一个文件中
   3. 多个数据: 总数量:marshal.dump()->marshal.load(fp):
        总数量:循环->marshal.load(fp)依次读取

多个数据, 也可以按照比较友好的like dict的方式, 将数据存储到文件中
   可以将数据存储在文件中, 通过key值直接获取对应的数据,用shelve
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值