目录
- 一、文件
- 1.1使用
- 1.2打开和关闭
- 1.2.1打开
- 1.2.2关闭
- 1.3内容读取
- 1.4文件写入
- 二、数据的格式化好处理
- 2.1数据组织的维度
- 2.1.1一维数据
- 2.1.2二维数据
- 2.1.3多维数据
- 2.1.4高维数据
- 2.1.5数据的操作周期
- 2.2一维数据
- 2.2.1表示
- 2.2.2 存储
- 2.2.3 处理
- 2.3 二维数据
- 2.3.1 表示
- 2.3.2 存储
- 2.3.3处理
- 2.1数据组织的维度
一、文件
1.1使用
- 文件是存储在辅助存储器上的数据序列
- 文件是数据存储的一种形式
- 文件展现形态:文本文件和二进制文件(本质上所有文件都是二进制形式存储)
文本文件
- 由单一特定编码组成的文件
- 由于存在编码,也被看成是存储的长字符串
- 适用于:.txt文件,.py文件等
二进制文件
- 直接由比特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()
1.2打开和关闭
文件一般存储在硬盘上,为存储状态;如果要处理一个文件,首先要使该文件变成占用状态
状态的转换通过打开和关闭进行转换
1.2.1打开
<变量名>=open(<文件名>,<打开模式>)
- 变量名->文件句柄
- 文件名->文件路径和名称(源文件同目录可省路径)
- 打开模式->文本 or 二进制(读 or 写)
打开模式:
- 'r':只读模式,默认值,若文件不存在返回 FileNotFoundError
- 'w':覆盖写模式,文件不存在则创建,存在则完全覆盖
- 'x':创建写模式,文件不存在则创建,存在则返回 FileExistsError
- 'a':追加写模式,文件不存在则创建,存在则在文件最后追加内容
- 'b':二进制文件模式
- 't':文本文件模式,默认值
- '+':与 r/w/x/a一同使用,在原功能基础上增加同时读写功能
1.2.2关闭
<变量名>.close()
变量名->文件句柄
1.3内容读取
.read(size=-1):读取全部内容,如果给出参数,读取前 size长度
.readline(size=-1):读入一行内容,如果给出参数,读取该行前 size长度
.readlines(hint=-1):读入文件所有行,以每行为元素形成列表;如果给出参数,读取前 hint行
#全文本操作
#法一:一次读入,统一处理.对大文件代价很大
fname=input("输入要打开的文件名")
fo=open(fname,"r")
txt=fo.read()
#对全文 txt进行处理
fo.close()
#法二:按数量读入,逐步处理
fname=input("输入要打开的文件名")
fo=open(fname,"r")
txt=fo.read(2)
while txt!="":
#对 txt进行处理
txt = fo.read(2)
fo.close()
#逐行操作
#法一:一次读入,分行处理
fname=input("输入要打开的文件名")
fo=open(fname,"r")
for line in fo.readline():
print(line)
fo.close()
#法二:分行读入,逐行处理
fname=input("输入要打开的文件名")
fo=open(fname,"r")
for line in fo:
print(line)
fo.close()
1.4文件写入
.write(s):向文件写入一个字符串或字节流
.writelines(lines):将一个元素都是字符串的列表写入文件
.seek(offset):改变当前文件操作指针的位置,offset含义:0-文件开头,1-当前位置,2-文件结尾
fo=open("output.txt","w+")
ls=["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0) #如果没有该行代码,则文件操作指针默认在最后,程序不会有任何输出
for line in fo:
print(line)
fo.close()
二、数据的格式化好处理
2.1数据组织的维度
2.1.1一维数据
由对等关系的有序或无序数据构成,采用线性方式组织
对应列表、数组和集合等概念
2.1.2二维数据
由多个一维数据构成,是一维数据的组合形式
表格是典型的二维数据(表头可以算作二维数据的一部分,也可以不算)
2.1.3多维数据
由一维或二维数据在新维度上扩展形成
比如高校排名表在时间维度上扩展,不同年份排名不同
2.1.4高维数据
仅利用最基本的二元关系展示数据间的复杂结构
2.1.5数据的操作周期
存储 <-> 表示 <-> 操作
即
存储格式 <-> 数据类型 <-> 操作方式
#高维数据 举例:键值对
{
'firstname':'Xinxin',
'lastname':'Wang',
'address':{
'stressAddr':'瀍河',
'city':'洛阳',
'zipcode':'471000'
},
'professional':['Data','Analysis']
}
2.2一维数据
2.2.1表示
如果数据间有序,使用 列表 类型
如果数据间无序,使用 集合 类型
进而可以通过 for循环遍历处理数据
2.2.2 存储
采用空格,英文半角逗号,特殊字符等分隔
缺点:需要根据数据特点定义,通用性较差(如采用空格分隔时,存储内容中不能出现空格)
2.2.3 处理
存储格式与(列表或集合的)表示方式之间的转换:将存储的数据读入程序,将程序表示的数据写入文件
#一维数据的处理
#1、从空格分隔的文件中读入数据
#中国 美国 日本 法国
txt=open(fanme).read()
ls=txt.split()
txt.close() #ls为:['中国','美国','日本','法国']
#2、采用特殊分隔方式将数据写入文件
ls=['中国','美国','日本']
f=open(fname,"w")
f.write('$'.join(ls))
f.close() #为:中国$美国$日本
2.3 二维数据
2.3.1 表示
使用列表类型
- 列表类型可以表达二维数据
- 使用二维列表(列表中的每一个元素也是列表,代表二维数据的一行或一列)
2.3.2 存储
CSV数据存储格式
- CSV:Comma-Separated Values #由逗号分隔的值
- 国际通用的一二维数据存储格式,一般.csv扩展名
- 每行一个一维数据,采用逗号分隔,无空行
- Excel好一般编辑软件都可以读入或另存为csv文件
注意
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 一般索引习惯:ls[row][column],先行后列
2.3.3处理
CSV格式文件
#二维数据的处理
#1、从CSV格式的文件中读入数据
fo=open(fname)
ls=[]
for line in fo:
line=line.replace("\n","") #把每行最后的回车替换为空字符串
ls.append(line.split(",")) #把每行的元素用逗号分隔开形成列表
fo.close()
#2、将数据写入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)