1.1 文件打开
- 用于创建、读取、更新和删除文件的函数
- open
- 打开文件的4种模式(r,a,w,x)
- 处理模式:二进制、文本
1.2 文件读取
- read
- readline
- close
代码练习
# 打开文件准备读入数据
f = open('键盘输入.txt',mode='rt', encoding='utf-8')
#read() - 读数据,一次读取全部数据
# s = f.read()
#read(n) - 读取n个字符,从当前文件读取指针开始读
# s = f.read(10)
# print(s)
# seek(n) - 文件读取指针后移n个字节,默认从文件起始位置开始
# f.seek(8)
# s = f.read(5)
# print(s)
# readlines() - 读取全部数据,返回列表
# ss = f.readlines()
# print(ss)
#readline() - 读取1行
# s = f.readline()
# print(s)
# s = f.readline()
# s = f.readline()
# s = f.readline()
# s = f.readline()
# s = f.readline()
#如果到达文件末尾,返回空字符串
# print(s+"<",len(s))
# tell() - 当前文件指针的位置
print(f.tell())
#读文件全被内容,一行一行读
while True:
s = f.readline()
if s=='':
break
print(s,end='')
print(f.tell())
#关闭文件
f.close()
1.3 文件写入
- 写入已有的文件
- 创建新文件
代码例子
写文件
'''
mode - 文件打开模式
r - 读 read
w - 写 write
t - 字符操作
encoding - 字符编码,常用utf-8
'''
# 打开文件准备写入字符
f = open('学生.txt',mode='w',encoding='utf-8')
# 写入数据
# f.write("Hello 你好!")
# f.write("Hello 你好!")
# f.write("Hello 你好!")
# f.writelines("Hello 您好!\n")
# f.writelines("Hello 您好!\n")
# f.writelines("Hello 您好!\n")
f.writelines(["Hello 你好!","Hello 你好!","Hello 你好!"])
# 关闭文件
f.close()
读写
f = open('键盘输入.txt',mode='a',encoding='utf-8')
while True:
s = input("请输入:\n")
if s=='#':
break
f.write(s)
f.write("\n")
# 刷新
f.flush()
#关闭文件
f.close()
字节操作
#字节操作
f = open("学生.txt",mode='wb')
f.write(b'hello') # b - 把字符串转成字节
f.close()
1.4 删除文件
- os.path.exists
- rmdir
1.5 json文件
import json
user={'name':'zhang','age':20}
# dumps() - 把python对象转成JSON字符串
s = json.dumps(user)
print(s,type(s))
# loads() - 把JSON字符串转成python对象
y = json.loads(s)
print(y['name'])
f=open('测试.txt','w',encoding='utf-8')
# dump() - python对象写入json文件
json.dump(user,f)
f.close()
f=open('测试.txt','r',encoding='utf-8')
# load() - 读取json文件,转成python对象
x = json.load(f)
print(x,type(x))
f.close()
1.6 pickle
import pickle
lst=["java","python","web"]
f = open("测试pickle.txt",mode='wb')
# dump() - 把python对象序列化成字节保存至二进制文件
pickle.dump(lst,f)
f.close()
f = open("测试pickle.txt",mode='rb')
# load() - 读取二进制文件反序列化成python对象
lst2 = pickle.load(f)
print(lst2,type(lst2))
f.close()
1.7 IO
# sep - 分隔符,默认值是空格
print("hello",123,sep=',')
user={'name':'zhang','age':20}
print(user)
# % 格式化输出
print('%(name)s今年%(age)d岁了' % user)
print('%s今年%d岁了'%('小明',18))
print('% 10d'%12) # ' 12'
print('%010.2f' % 12.34567) #'0000012.35'
#format 格式化输出
print('{}今年{}岁了'.format('小明',18))
print('{name}今年{age}岁了'.format(age=18,name='小明'))
print('{}今年{}岁了'.format(18,'小明'))
print('{name}今年{age}岁了'.format(**user))
lst = ['lisi',22]
print('{0[0]}今年{0[1]}岁了'.format(lst)) # 0[0]相当于lst[0]
print('{num:*^#16x}'.format(num=199))
print('{:>#8b},{:>#8o},{:>#8x}'.format(9,9,9))
print("{0:.2f},{0:e},{0:.2%}".format(30.1415926525))
1.7 实战练习
题目要求:相信在你的电脑里有许多文件已经被遗忘在某个角落里很久了,那些特别大的文件,占用了磁盘空间,虽说硬盘越发便宜了,不影响使用,但编写一段程序将这些被遗忘的大文件找出来不是一件趣事么
def get_big_file(path, filesize):
"""
找出path目录下文件大小大于filesize的文件
:param path:
:param filesize:
:return:
"""
pass
想要完成这个功能,有两个技术点要解决:
- 遍历文件夹及其子文件夹,找出所有的文件目录
- 获取文件的大小
遍历文件夹,可以使用os.walk方法,获取文件大小可以使用os.path.getsize方法,看来,技术点已经都解决了