转载请注明出处
读文件
输入输出流 (以python的角度)
read 文件是 输入流,
my_file=open(filename,encoding='utf8')
- 读取整个文件
data=my_file.read() # 一次性 读完整个文件 文件指针在结尾
- 分段读取
data=my_file.read(2) # 一次读两个字符
文件指针在第二个字符后面
for item in data:
print(item)
# 一次性读取一个字符
while True:
data=my_file.read(2) # 一次读取两个字符 你读取字符就是字符数,如果你加上b 以字节读取就是字节数
if not data:
break
print(data)
- 按行读取代码
f = open("D:/aipai.sql", 'r', encoding='utf8')
# 文件时一个可迭代对象
for line in f:
print(line)
with open("file") as fh:
line = fh.readline()
while line:
line = fh.readline()
- 按行读取
data=my_file.readline() # 一次读取一行 包含换行符
data=my_file.readline(2) # 读取一行中的几个字符
data=my_file.readlines() # 读取所有行 返回一个列表
- 二进制读取
file=open(r'd:\test.png','rb')
data=file.read() # 一次读取整个文件
data=file.read(2) # 一次读取2个字节
写文件
- 文本写出
data='Hello'
file=open(filename,'w',encoding='utf8')
file.write(data) # 会覆盖原来文件,没有则新建
writelines(['a','b']) 使用列表来写入
- 追加文件
data='Hello'
file=open(filename,'a')
file.write(data) # 追加到原来文件里面
- 二进制写出
data='你好'.encode('uft8') # bytes 类型
file=open(file_name,'wb')
file.write(data)
- 二进制追加
data='你好'.encode('uft8') # bytes 类型
file=open(file_name,'ab')
file.write(data)
模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错 是
w 只能写 创建 是
w+ 可读可写 创建 是
a 只能写 创建 否,追加写
a+ 可读可写 创建 否,追加写
读写内存
from io import BytesIO
from io import SringIo
字符串和字节类似
读
with BytesIO(b'abc') as b:
data=b.read()
写
with Bytes() as b:
b.write(b'abc')
print(b.getvalue()) 读取内存中的内容
- 定位读取
f=open()
f.seek(3,0) # 3表示相对于起点的偏移量 第二个参数
0 表示从文件起点开始
1 表示从当前位置开始
2 表示从文件末尾开始
如果要使用 seek(5,1) 就是 后面使用非0 的参数那么就要用 二进制的方式读取文件
f.tell() # 返回当前的位置
os 模块
- 系统
import os
os.name # 系统名称
e=os.environ # 环境变量
os.system() # 执行系统命令
os.popen() # 执行系统命令
print(e.get('path'))
- 目录操作
os.listdir() # 列出当前目录的文件
os.listdir('.') # 列出当前目录的文件
os.listdir('..')# 返回父目录名称
os.path.abspath('.') # 返回当前目录的绝对路径
括号里面必须要加参数
os.mkdir('test') # 新建文件夹
- 其他
os.paht.exists('a.txt')
os.path.split(r'\123\456\test.txt'') # 路径一分为二
os.path.join(dir,file) # 跨平台文件名称连接
- 删除操作
os.remove('test.txt') # 删除文件
os.rmdir('删除空目录')
- 重命名
os.rename(old_name,new_name)
- 遍历目录
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) -->生成器
paths = os.walk(r'D:\000_laopei_python',onerror=None)
print(next(paths))
# 获取了指定目录的所有路径
import os
for root, dirs, files in os.walk(r"D:\000_laopei_python\day10", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
root 是当前目录名称、dirs 是当前目录下的子目录列表、files是当前目录下的文件列表
shutil 模块
shutil.copyfile(src,dest) # 文件复制
自行上网搜索
pickle
- 序列化
import pickle
L=[1,2,3,4]
# 序列化到文件 文件是二进制写入模式 wb
with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','wb') as f:
pickle.dump(L,f)
# 序列化到内存
L=[1,2,3]
msg=pickle.dumps(L) # msg是存对象的内存
- 反序列化
# 从文件反序列化 文件是二进制读取模式 rb
with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','rb') as f:
data=pickle.load(f)
print(data)
# 从内存反序列化
data=pickle.loads(msg) # msg是之前的的内存
print(data)
json 文件传输格式
- 序列化
# 序列化到文件 文件是字符串写入模式 w 文件内存是 [1,2,3] 的字符串
L=[1,2,3]
with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','w') as f:
json.dump(L,f)
# 序列化到内存
L=[1,2,3]
msg=json.dumps(L) # msg是内存
# 序列化对象
- 反序列化
# 从文件反序列化
with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','r') as f:
data=json.load(f)
print(data)
# 从内存反序列化
data=json.loads(msg)
print(data)
网友评论