目录
Python基础语法(6)
文件的使用
文件的类型
- 定义:文件是数据的抽象和集合
- 文件是存储在存储器上的数据序列
- 文件时数据存储的一种形式
- 文件的展现形态:文本文件和二进制文件
- 区分文本文件和二进制文件
文本文件和二进制文件只是文件的展示方式;本质上,所有文件都是二进制形式存储;形式上,所有文件采用两种方式展示。
- 文本文件
由单一特定编码组成的文件,如UTF-8编码
由于存在编码,也被看成是存储着的长字符串
适用于例如:.txt文件、.py文件等
- 二进制文件
直接由比特0和1组成,没有统一字符编码
一般存在二进制0和1的组织结构,即文件格式
适用于例如:.png文件、.avi文件等
文件的打开与关闭
文件处理的步骤:打开-操作-关闭
<变量名> = open(<文件名>, <打开模式>)
- 文件名表示方法:
‘D:/Software/Python/f.txt’
‘D:\\Software\\Python\\f.txt’
‘./Software/Python/f.txt’
‘f.txt’(需与源文件同目录)
- 打开模式
文件的打开模式 | 描述 |
---|---|
‘r’ | 只读模式,默认值,如果文件不存在,则返回FileNotFoundError |
‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
‘b’ | 二进制文件模式 |
‘t’ | 文本文件模式,默认值 |
‘+’ | 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
>>> f = open('f.txt') # 文本形式,只读模式,默认值
>>> f = open('f.txt', 'rt') # 文本形式,只读模式,默认值
>>> f = open('f.txt', 'w') # 文本形式,覆盖写模式
>>> f = open('f.txt', 'a+') # 文本形式,追加写模式+读文件
>>> f = open('f.txt', 'x') # 文本形式,创建写模式
>>> f = open('f.txt', 'b') # 二进制模式,只读模式
>>> f = open('f.txt', 'wb') # 二进制模式,覆盖写模式
- 关闭
<变量名>.close()
文件内容的读取
- 读取
操作方法 | 描述 |
---|---|
<f>.read(size = -1) | 读入全部内容,如果给出参数,读入前size长度 |
<f>.readline(size = -1) | 读入一行内容,如果给出参数,读入该行前size长度 |
<f>.readlines(hint = -1) | 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行 |
- 文件全文本操作
- 遍历全文本
方法一:
fname = input('请输入要打开的文件名称:')
fo = open(fnmae, 'r')
txt = fo.read()
# 对全文txt进行处理
fo.close()
方法二:
fnmae = input('请输入要打开的文件名称:')
fo = open(fname, 'r')
txt = fo.read(2)
while txt != '':
# 对文本txt进行处理
txt = fo.read(2)
fo.close()
- 逐行遍历文件
方法一:
fnmae = inpiut('请输入要打开的文件名称:')
fo = open(fnmae, 'r')
for line in fo.readlines():
print(line)
fo.close()
方法二:
fnmae = input('请输入要打开的文件:')
fo = open(fnmae, 'r')
for line in fo:
print(line)
fo.close()
数据文件的写入
操作方法 | 描述 |
---|---|
<f>.write(s) | 向文件写入一个字符串或字节流 |
<f>.writelines(lines) | 将一个元素全为字符串的列表写入文件 |
<f>.seek(offset) | 改变当前文件操作针位置,offset含义如下:0-文件开头;1-当前位置;2-文件结尾 |
>>> f.write('中国是一个伟大的国家')
>>> ls = ['中国', '美国', '英国']
>>> f.writelines(ls)
中国美国英国
>>> f.seek(0) # 回到文件开头
一维数据的格式化和处理
数据组织的维度
- 维度:一组数据的组织形式
- 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织(对应列表、数组和集合等概念)
- 二维数据:由多个一维数据构成,是一维数据的组合形式(表格是典型的二维数据;其中,表头是二维数据的一部分)
- 多维数据:由一维或二维数据在新维度上扩展形成
- 高维数据:仅利用最基本的二元关系展示数据间的复杂结构
一维数据的表示
- 如果数据间有序:使用列表类型
- 列表类型可以表达一维有序数据
- for循环可以遍历数据,进而对每个数据进行处理
- 如果数据间无序:使用集合类型
- 集合类型可以表达一维无序数据
- for循环可以遍历数据,进而对每个数据进行处理
一维数据的存储
- 空格分隔
- 使用一个或多个空格分隔进行存储,不换行
- 缺点:数据中不能存在空格
- 逗号分隔
- 使用英文半角逗号分隔数据进行存储,不换行
- 缺点:数据中不能有英文逗号
- 其他方式
- 使用其他符号或符号组合分隔,建议采用特殊符号
- 缺点:需要根据数据特点定义,通用性较差
一维数据的处理
- 将存储的数据读入程序
- 从空格分隔的文件中读入数据
中国 美国 英国 法国
>>> txt = open('fname.txt').read()
>>> ls = txt.split()
>>> ls
['中国','美国', '英国', '法国']
- 从特殊符号分隔的文件中读入数据
中国$美国$英国$法国
>>> txt = open('fname.txt').read()
>>> ls = txt.split('$')
>>> ls
['中国','美国', '英国', '法国']
- 将程序表示的数据写入文件
- 采用空格分隔方式将数据写入文件
ls = ['中国','美国', '英国', '法国']
f = open('fname.txt', 'w')
f.write(' '.join(ls))
f.close()
- 采用特殊符号分隔方式将数据写入文件
ls = ['中国','美国', '英国', '法国']
f = open('fname.txt', 'w')
f.write('$'.join(ls))
f.close()
二维数据的格式化和处理
二维数据的表示
- 使用列表类型
- 列表类型可以表达二维数据
- 使用二维列表
- 使用两层for循环遍历每个元素
- 外层列表中每个元素可以对应一行,也可以对应一列
[[3.1, 3.14, 3.141, 3.1415], [3.14159, 3.141592, 3.1415926, 3.14159265]]
CSV数据存储格式
CSV: Comma-Separated Values
- 国际通用的一二维数据存储格式,一般.csv扩展名
- 每行一个一维数据,采用逗号分隔,无空行
- Excel和一般编辑软件都可以读入或另存为csv文件
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 逗号为英文半角逗号,逗号与数据之间无额外空格
二维数据的存储
- 按行存或者按列存都可以,具体由程序决定
- 一般索引习惯:ls[row][column],先行后列
- 根据一般习惯,外层列表每个元素是一行,按行存
二维数据的处理
- 从CSV格式的文件中读入数据
fo = open(fname)
ls = []
for line in fo:
line = line.replace('\n', '')
ls.append(line.split(','))
fo.close()
- 将数据写入CSV格式的文件
ls = [[], [], []] # 二维列表
f = open(fname, 'w')
for item in ls:
f.write(','.join(item) + '\n')
f.close()
- 二维数据的逐一处理
采用二层循环
ls = [[1, 2], [3, 4], [5, 6]]
for row in ls:
for column in row:
print(column)