十、文件
1.文件
文件是数据的抽象和集合
-文件是存储在辅助存储器上的数据序列
-文件是数据存储的一种形式
-文件的展现形式:文本文件和二进制文件,本质上所有文件都是以二进制的方式进行存储
(1)文本文件:由单一特定编码组成的文件,例如UTF-8
-由于存在编码,也被看成一个存储的长字符串
-例子:.txt文件 .py文件
(2)二进制文件:直接由比特0和1组成,没有统一字符编码
-一般存在二进制0和1的组织结构,即文件格式
-例子:.png文件 .avi文件
使用文本文件格式和二进制格式分别打开同一文件:
tf = open("f.txt", "rt")
print(tf.readline())
tf.close()
#输出:
中国是一个伟大的国家
------------------------------------------
bf = open("f.txt", "rb")
print(bf.readline())
bf.close()
#输出:
b'\xd6\xd0\xb9\xfa\xca\xc7\xd2\xbb\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2'
2.文件的打开和关闭
-文件的处理步骤:打开-操作-关闭
文件的存储状态 ----> 文件的占用状态:f = open( , )
文件的占用状态 ----> 文件的存储状态:f.close( )
<变量名> = open(<(路径)文件名> , <打开模式:rt\rb\wt\wb>)
注意:Windows系统下面的路径使用的是斜杠 \ ,这跟字符串中的转义字符冲突,因此要使用反斜杠 / 来表示路径,或者使用 \\
程序退出的之后,文件会被自动关闭
3.文件的打开模式
a = open("f.txt") #默认为只读模式,文本形式
a = open("f.txt", "rt") #同默认
a = open("f.txt", "w") #覆盖写模式
a = open("f.txt", "a+") #追加写+读模式
a = open("f.txt", "x") #创建写模式
a = open("f.txt", "b") #二进制形式只读
a = open("f.txt", "wb") #二进制形式覆盖写
4.文件内容的读取
f.read(size) #读入前size长度,形成一个列表
f.readline(size) #读入一行前size个字符,形成一个列表
f.readlines(hint) #读入前hint行,一行为一个元素,形成一个列表
5.数据的文件写入
f.write(s) #写入字符串
f.writelines(list) #将列表中的内容全部写入
f.seek(offset) #offset的默认值有:0代表文件开始、1代表当前位置、2代表文件末尾
在写入之后,文件中的指针会在文件末尾,如果此时需要进行遍历就需要使用seek函数把指针再重新移动到文件开头
6.数据组织的维度
一维数据:有对等关系的有序或无序数据构成,采用线性方式进行组织 -> 对应列表、数组、集合等概念
二维数据:由多个一维数据构成,是一维数据的组合形式 -> 表格是典型的二维数据
多维数据:一维、二维数据在新的维度上进行扩展得到的
高维数据:仅利用最基本的二元关系展示数据间的复杂结构
7.数据的操作周期
8.一维数据
(1)表示
if 数据间有序:使用列表类型,可以使用for循坏来遍历数据
if 数据间无序:使用集合类型,可以使用for循环来遍历数据
(2)存储
空格分隔、逗号分隔、其他方式
中国 美国 日本 俄罗斯 韩国 朝鲜
中国,美国,日本,俄罗斯,韩国,朝鲜
中国$美国$日本$俄罗斯$韩国$朝鲜
(3)处理
使用 split(ch) 函数可以去掉分隔来获得数据的列表
写入处理:写入列表中的元素并且以空格进行分隔:
ls = ["d", "z", "h"]
f.write(" ", join(ls))
9.二维数据
(1)表示
一般使用二维列表类型来表示二维数据
如果是数据分析或者是大数据处理时表示二维数据则使用更加高效的表示形式
-使用两层loop就可以遍历数据
(2)CSV格式与二维数据存储
CSV:国际通用的一二维数据存储格式,一般为.csv扩展名
-每行一个一维数据,采用逗号分隔,无换行
-使用Excel软件可以读入读出,一般的编辑软件都可以产生csv格式
注意:
-csv中如果某个元素缺失,需要保留逗号
-二维数据的表头可以作为数据存储,也可以另行存储
-逗号为英文半角逗号,逗号与数据之间无额外空格
二维数据存储一般为先行后列:ls[row][column]
(2)存储
#从csv格式文件中读入数据
f = open(fname)
ls = []
for line in f:
#去掉换行
line = line.replace("\n", " ")
ls.append(line, split(","))
f.close()
#将数据写入csv文件
ls = [[], [], []] #二维列表
f = open(fname, "w")
for item in ls:
f.write(" ".join(",") + "\n")
f.close()
(3)处理
遍历二维数据:
for row in ls:
for column in row:
print(ls[row][column])