python复习100天

python复习第8天:文件读写

2020-03-20  本文已影响0人  潮办公

title: python复习100天--第8天
date: 2020-03-15 21:00:24
tags:
- python
- 基础
categories: python复习
top: 9


文件读写

简单读写

# 写一个空白文件并且保存
f = open('001.txt', 'wt')
f.write('hehe')  # 写入内容
f.close()  # 关闭文件
# 写完后,你的路径下会多一个001.txt文件
# 写一个空白文件并且保存
with open('002.txt', 'wt') as f:
    f.write('hehe')  # 写入内容
    # 这里不需要写f.close(),因为文件会自动关闭。

常用读写模式

读写方式 英文全称 使用结果
w write 覆盖写入,即不考虑原来文件是否存在,也不考虑文件是否存在内容,均对其覆盖重建文件。
r read 读取文件,读取的文件必须存在,如果不存在会保存。
a append 追加写入,即在末尾添加新内容。如果不存在该文件,则自动创建新文件。
读取类型 英文全称 使用结果
t text 按文本类型对文件进行操作,t可以省略。txt,json,xml,html都可以看成是文本。
b binaray 按二进制进行操作。一般来说,像图片,音乐,视频都是用二进制进行操作。
模式 描述
r 只读文本模式打开,需要文件存在。等同于rt。
rb 只读二进制模式打开,需要文件存在。
r+ 读写文本模式打开,如果是写入则会覆盖源文件。
rb+ 读写二进制模式打开,如果是写入则会覆盖。
w 写入文本模式打开,如果不存在则创建新文件。如果存在则覆盖源文件内容。
w+ 读写文本模式打开,比w多了一个读取功能。
wb 写入二进制文件。
wb+ 读写二进制文件
a 追加写入文本模式
ab 追加写入二进制模式
a+ 追加写入+读取文本模式
ab+ 追加写入+读取二进制模式

文件读取

# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
str1 = f.read()  # 可以在括号里面输入数字,表示读取多少个字符,
# 不输入默认读取所有字符
print(str1)

"""
# 输出结果
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
str1 = f.readline()  # 第一次读取第一行
str2 = f.readline()  # 第二次读取第二行
print(str1, str2)
f.close()
"""
# 输出结果
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
list1 = f.readlines()
print(list1)
f.close()
"""
# 输出结果
['床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
"""
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
print('文件操作前指针位置', f.tell(), '\n')
str1 = f.readline()
print('读取一行后的指针位置', f.tell(), '\n')
str2 = f.readline()
print('读取所有内容后的指针位置', f.tell(), '\n')
print(str1, str2)

"""
# 输出结果
文件操作前指针位置 0 

读取一行后的指针位置 37 

读取所有内容后的指针位置 73 
xulieh
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rb')  # 以二进制格式打开,防止可能出现的中文报错
print('当前指针位置', f.tell())
f.seek(6, 0)  # 从头开始计算,把指针移动到第4个字符上
str1 = f.read(1)
print('当前指针位置', f.tell())
print(str1)  # 打印当前指针指向的字符
f.seek(4, 1)  # 从当前位置往后移动2个
str2 = f.read(1)
print('当前指针位置', f.tell())
print(str2)
f.seek(-2, 2)  # 跳转到倒数第2个字符
str3 = f.read(1)
print('当前指针位置', f.tell())
print(str3)
f.close()
"""
# 输出结果
当前指针位置 0
当前指针位置 7
b'\xe6'
当前指针位置 12
b'\x88'
当前指针位置 72
b'\x80'
"""

总结

常用方法 功能描述
open 打开文件,是读写文件的前提
write 写入内容到文件,需要有写入权限
read 读取文件内容,默认读取所有内容,返回字符串
readline 读取单行内容,返回字符串
readlines 读取所有行内容,返回列表
tell 给出当前指针位置
seek 跳转指针位置
close 关闭文件,防止内存占用

对象序列化和反序列化

序列化作用

反序列化作用

使用方法

import pickle
dict1 = {'key1': 'value1'}  # 定义一个简单字典
f = open('001.pkl', 'wb')  # pkl为pickle文件的后缀
pickle.dump(dict1, f)  # 将dict1序列化到001.pk1文件中
f.close()
# 结果会生成一个001.pkl文件
import pickle
f = open('001.pkl', 'rb')
dict2 = pickle.load(f)
print(dict2)
print(type(dict2))
f.close()
"""
{'key1': 'value1'}
<class 'dict'>
"""
import pickle
dict1 = {'key1': 'value1'}
b1 = pickle.dumps(dict1)
with open('001.pkl', 'wb') as f:
    f.write(b1)
import pickle
f = open('001.pkl', 'rb')
str1 = f.read()  # 以二进制方式读取其内容
dict1 = pickle.loads(str1)  # 二进制转对象
print(dict1)
print(type(dict1))
f.close()

"""
# 输出结果
{'key1': 'value1'}
<class 'dict'>
"""

json序列化和反序列化

import json
dict1 = {'key1': 'value1'}
f = open('001.json', 'wt')  # 以文本模式打开
json.dump(dict1, f)
f.close()
# 运行结束后,将会多出一个001.json文件
import json
f = open('001.json', 'rt')  # 以文本读取模式打开
dict1 = json.load(f)
print(dict1)
print(type(dict1))
f.close()

# 输出结果
"""
{'key1': 'value1'}
<class 'dict'>
"""
import json
dict1 = {'key1': 'value1'}
str1 = json.dumps(dict1)
f = open('001.json', 'wt')  # 以文本模式打开
f.write(str1)
f.close()
# 运行结束后,将会多出一个001.json文件
import json
f = open('001.json', 'rt')  # 以文本模式打开
str1 = f.read()
dict1 = json.loads(str1)
print(dict1)
print(type(dict1))
f.close()

# 输出结果
"""
{'key1': 'value1'}
<class 'dict'>
"""
上一篇 下一篇

猜你喜欢

热点阅读