文件的概述
- 文件是存储在辅助存储设备的一组数据序列
- 不同类型的文件通过后缀名进行区分
文件的分类
文本文件
- 如 .txt文件,文件中的内容由于编码格式的不同,所占磁盘空间的字节数不同
二进制文件
- 如 .png文件,文件直接由0或1组成,没有统一编码,需要使用指定的软件打开
文件的创建(打开)和关闭
文件的操作顺序
- 打开 → 操作 → 关闭
创建(打开)文件
变量名=open(filename, mode, encoding)
操作文件(文件的读写)
变量名.read() 变量名.write(s)
关闭文件
变量名.close()
文件的状态和操作过程
文件的基本操作
文件的打开模式
文件的读写方法
文件的复制
with 语句
语法结构
with open(...) as file:
使用 with 语句的优点
- 处理文件时,无论是否产生异常,都能保证 with 语句执行完毕后关闭已经打开的文件
数据的组织维度及存储
数据的组织维度
一维数据
- 采用线性方式组织数据,可以使用列表、元组、集合进行存储
二维数据
- 也称表格数据,由行和列组成,在 Python 中可使用二维列表进行存储
高维数据
- 使用 key-value对方式组织数据,在 Python 中可使用字典进行存储
数据的存储
一维数据和二维数据
- 可采用 CSV(逗号分隔值)格式进行存储
- CSV 格式存储的文件拓展名为 .csv
- 可以使用记事本或Excel打开
- 每行表示一个一维数据,多行表示二维数据
lst = ['张三', '李四', '王五', '马六']
def my_write(lst):
with open('student.csv', 'w') as file:
file.write(','.join(lst))
my_write(lst)
def my_read():
with open('student.csv', 'r') as file:
s = file.read()
lst = s.split(',')
print(lst)
my_read()
goods = [
['商品名称', '单价', '采购数量'],
['水杯', '98.5', '20'],
['鼠标', '89', '100']
]
def my_write_table(lst):
with open('table.csv', 'w', encoding='gbk') as file:
for line in lst:
file.writelines(','.join(line))
file.write('\n')
my_write_table(goods)
data = []
def my_read_table():
with open('table.csv', 'r', encoding='gbk') as file:
for line in file:
lst = line[:len(line) - 1].split(',')
data.append(lst)
print(data)
my_read_table()
高维数据
- JSON格式可以对高维数据进行存储,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和理解
- JSON格式的数据使用 key:value 形式存储
- Python内置的json模块专门用于处理JSON格式数据
- json模块的两个过程
- 编码:将 Python 数据类型转成 JSON 格式的过程
- 解码:将 JSON 格式解析对应到 Python 数据类型的过程
import json
lst = [
{"name": "陈子川", "age": 18, "score": 90},
{"name": "陆小凤", "age": 21, "score": 89},
{"name": "张无忌", "age": 19, "score": 100}
]
# 编码,转成JSON格式,结果为一个字符串
# ensure_ascii=False 正常显示中文
# indent 增加数据的缩进,使生成的Json格式字符串更具有可读性
str = json.dumps(lst, ensure_ascii=False, indent=4)
print(type(str))
print(str)
# 解码,将JSON格式字符串转成Python中的数据类型
lst2 = json.loads(str)
print(type(lst2))
print(lst2)
# 编码到文件
with open("students.txt", 'w') as file:
json.dump(lst2, file, ensure_ascii=False, indent=4)
# 解码到程序
with open("students.txt", 'r') as file:
print(json.load(file))
目录与文件的相关操作
os模块
- Python 内置的与操作系统和文件系统相关的模块,该模块中语句的执行结果通常与操作系统有关
import os
print("当前工作目录:" + os.getcwd())
lst = os.listdir()
print("当前路径下所有的目录及文件:", lst)
print('指定路径下的所有目录及文件:', os.listdir('E:/Developer')) # 'F:\Developer' r'E:\Developer'
# 创建目录
os.mkdir('ivan') # 如果要创建的文件夹(目录)已存在,程序报错
os.makedirs(os.getcwd() + r'\aa\bb\cc') # 创建多级目录
# 删除目录
os.rmdir('./ivan') # 目录不存在,执行删除程序报错
os.removedirs('./aa/bb/cc')
# 把path设置成当前路径
os.chdir('E:/Developer')
print("获取当前路径:", os.getcwd())
# 遍历目录数
for dirs, dirlst, filelst in os.walk('E:/Developer/PycharmProjects'):
print("------------------")
print(dirs)
print(dirlst)
print(filelst)
os模块的高级操作
import os
# 删除文件
os.remove('./a.txt') # 如果文件存在则删除,文件不存在删除报错
# 重命名文件
os.rename('./student.csv', './students.csv')
# 转换时间格式
import time # 内置的time模块
def date_format(longtime):
s = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(longtime))
return s
# 获取文件的信息
info = os.stat('./students.csv')
print(type(info))
print(info)
print("文件的大小(单位为字节):", date_format(info.st_size))
print("最近一次访问时间:", date_format(info.st_atime))
print("在Windows操作系统中显示的文件创建时间:", date_format(info.st_ctime))
print("最后的一次修改时间:", date_format(info.st_mtime))
# 启动路径下的指定文件
os.startfile('calc.exe')
os.path模块
- os.path是os模块的子模块,也提供了一些目录或文件的操作函数