Python——文件和数据格式化

一、文件

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内容读取

  • <f>.read(size=-1):读取全部内容,如果给出参数,读取前 size长度
  • <f>.readline(size=-1):读入一行内容,如果给出参数,读取该行前 size长度
  • <f>.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文件写入

  • <f>.write(s):向文件写入一个字符串或字节流
  • <f>.writelines(lines):将一个元素都是字符串的列表写入文件
  • <f>.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)

猜你喜欢

转载自www.cnblogs.com/xxwang1018/p/11571595.html