文件和数据格式化

7.1文件的使用

7.1.1文件的类型

  1. 文件时数据的抽象和集合
    ——文件是存储在辅助存储器上的数据序列
    ——文件是数据存储的一种形式
    ——文件展现形态:文本文件和二进制文件
  2. 文本文件 vs 二进制文件
    ——文本文件和二进制文件只是文件的展示方式
    ——本质上,所有文件都是二进制形式存储
    ——形式上,所有文件采用两种方式展示
  3. 什么是文本文件?
    —— 由单一特定编码组成的文件,如UTF-8编码是文本文件
    ——由于存在编码,也被看成是存储着的长字符串
    ——适用于例如:.txt文件,.py文件
  4. 什么是二进制文件?
    ——直接由比特0和1组成,没有统一字符编码
    ——一般存在二进制0和1的组织结构,即文件格式
    ——适用于:例如.png文件、.avi文件
  5. 所有文件都以二进制存储,有统一编码的称为文本文件,任何文件都能以二进制形式打开
  6. 文本形式打开文件代码
    首先要在Python的文件存储下建f.txt文件并输入内容保存。
#文本形式打开文件
tf = open("f.txt", "rt", encoding="utf-8")   #不加encoding = utf-8可能会报错,说gbk解析错误。
print(tf.readline())
tf.close()

#以二进制形式打开文件
bf = open("f.txt", "rb") #若将上面的代码和该代码写在同一文件中,不需要加encoding = utf-8即可实现预期输出
print(bf.readline())
bf.close()

7.1.2文件的打开和关闭

  1. 文件处理的步骤:打开-操作-关闭
    文件的存储状态—a.open(,)—>文件的占用状态;
    文件的占用状态—a.close()—>文件的存储状态;
  2. Python提供了三个常用的读文件函数:a.read(size)、a.readline(size)、a.readlines(hint)
    ————三个常用的写文件函数:a.write(size)、a.writelines(lines)、a.seek(offset)
  3. 文件的打开<变量名> = open(<文件名>, <打开模式>) 文件名:文件路径和名称,源文件同目录可省略路径,打开模式:文本or二进制(读 or 写)。
    文件路径四种方式:绝对路径下:D:\PYE\f.txt 需要写成"D:/PYE/f.txt" 或“D:\PYE\f.txt”
    ————————相对路径:与当前程序间的相对路径"./PYE/f.txt",从可执行程序的当前目录起,找PYE目录,程序与文件在相同目录里时,可以直接写成文件名称"f.txt"
  4. 文件的打开模式
文件打开模式 描述
‘r’ 只读模式,默认值,如果文件不存在,fanhuiFileNotFoundError
‘w’ 覆盖写模式,文件不存在则创建,存在则完全覆盖
‘x’ 创建写文件,文件不存在则创建,存在则返回FileExistsError
‘a’ 追加写模式,文件不存在则创建,存在则在文件最后追加内容
‘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() #<变量名> 为文件句柄,写程序只有打开没有调用该方法关闭文件,程序执行过程中,文件一直处于打开模式。程序退出,python解析器会自动关闭。

7.1.3文件内容的读取

操作方法 描述
< f >.read(size = -1) 读入全部内容,如果给出参数,读入前size长度。如s = f.read(2), 中国
< f >.readline(size = -1) 读入一行内容,如果给出参数,读该行前size长度。s = f.readline() 中国是一个伟大的国家
< f >.readlines(hint = -1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行。s = f.readlines(),结果为[‘中国是个伟大的国家!’]
  1. 遍历全文本——方法1——一次读入,统一处理
fname = input("请输入要打开的文件名称")
fo = open(fname, "r")
txt = fo.read()  #使用read函数一次性读取文本内容,放入txt中
#对全文txt进行处理
fo.close()

弊端:文本文件体量特别大时,一次性读入代价很大。
2. **遍历全文本:**方法2——**按数量读入,逐步处理,**适用于较大的文件

fname = input("请输入要打开的文件名称")
fo = open(fname, "r")
while txt != "":
	txt = fo.read(2)  #从文件中读入两个字节,对字节进行处理,读入信息不为空持续处理直到为空为止。
fd.close()
  1. 遍历全文本:逐行遍历方法1——适用分行存储的文件。一次读入,分行处理
fname = input("请输入要打开的文件名称")
fo = open(fname, "r")
for line in fo.readlines(): #for in遍历循环对fo所有信息以行的方式生成一个列表,每行是列表的一个元素,目的是遍历列表
	print(line)
fo.close()
  1. 逐行遍历文件:方法二
fname = input("请输入要打开的文件名称")
fo = open(fname, "r")
for line in fo: #fo是文件句柄,实现对尤其是文本文件的逐行处理
	print(line)
fo.close()

7.1.4数据的文件写入

  1. 操作方法
操作方法 描述
< f >.write(s) 向文件写入一个字符串或字节流。f.write(“中国是一个伟大的国家!”)
< f >.writelines(lines) 将一个元素全为字符串的列表写入文件,将各元素拼接后写入,无空格和换行ls = [“中国”,“法国”,“美国”],f.writelines(ls)
< f >.seek(offset) 改变当前文件操作指针的位置,offset含义如下:0-文件开头;1-当前位置,2-文件结尾。f.seek(0) #回到文件开头
#WriteFile1.py
fo = open("output.txt", "w+")
ls = ["中国", "法国", "美国"]
fo.writelines(ls)
fo.seek(0) #不加该代码时,指针在写入内容的后面下一个可能写入的位置,因此无该行代码遍历时不能输出文件内容,只有将指针返回文件开头后再遍历才能输出文件中的内容
for line in fo:
    print(line)
fo.close()

7.2实例:自动轨迹绘制

  1. 问题分析:
    ——需求:根据脚本来绘制图形
    ——不是写代码而是写数据绘制轨迹
    ——数据脚本是自动化最重要的第一步
    需求:读取文件——解析数据——绘制图形
  2. 基本思路:
    ——步骤1:定义数据文件格式(接口)
    ——步骤2:编写程序,根据文件接口解析参数绘制图形
    ——步骤3:编制数据文件
    数据接口:300,1,144,0,1,0 其中300指行进距离,1为转向判断,0:左转,1:右转;144指转向角度,后三个参数为RGB三个通道颜色,0——1之间的浮点数
    程序:
#AutoTraceDraw.py
import turtle as t
t.title("自动轨迹绘制")
t.setup(800, 600, 0 , 0)
t.pencolor("red")
t.pensize(5)

#打开数据文件,解析每行信息,并对信息进行处理
datals = []
f = open("data.txt")
for line in f:
    line = line.replace("\n", "") #将文件换行符转成空字符串
    datals.append(list(map(eval, line.split(",")))) #使用line.split分隔成若干字符串,map函数是内嵌函数,将第一个参数的功能作用于第二个参数的每个元素,第一个参数是函数名,第二个参数是一个迭代类型
#将列表中每个元素的引号都去掉,去掉之后的类型转成list类型
f.close()

#自动绘制
for i in range(len(datals)):
    t.pencolor(datals[i][3], datals[i][4], datals[i][5])
    t.fd(datals[i][0])
    if datals[i][1]:
        t.right(datals[i][2])
    else:
        t.left(datals[i][2])

data.txt文件的内容
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0

  1. 理解方法思维
    ——自动化思维:数据和功能分离,数据驱动的自动运行
    ——接口化设计:格式化设计接口,清晰明了
    ——二维数据应用:应用维度组织数据,二维数据最常用
  2. 应用问题扩展
    ——扩展接口设计,增加更多控制接口
    ——扩展功能设计,增加弧形等更多功能
    ——扩展应用需求,发展自动轨迹绘制到动画绘制

7.3一维数据的格式化和处理

7.3.1数据组织的维度

  1. 一维数据:**由对等关系的有序或无序数据构成,采用线性方式组织。**例如传统python中的列表、数组和集合等概念
  2. 二维数据:由多个一维数据构成,是一维数据的组合形式
    ——表格是典型的二维数据
    ——其中,表头是二维数据的一部分
  3. 多维数据:由一维或二维数据在新维度上扩展形成
  4. 高维数据:仅利用最基本的二元关系展开数据间的复杂结构,键值对
  5. 数据的操作周期
    存储<——>表示<——>操作
    数据存储指数据在磁盘中的存储状态,在数据存储中,我们关心的是数据的存储格式
    数据表示指程序表达数据的方式,数据表示中,关心的是数据类型

7.3.2一维数据的表示和存储

  1. 如果数据间有序:使用列表类型
    ——列表类型可以表达一维有序数据
    ——for 循环可以遍历数据,进而对每个数据进行处理
  2. 如果数据间无序:使用集合类型
    ——集合类型可以表达一维无序数据
    ——for循环可以遍历数据,进而对每个数据进行处理
  3. 一维数据的存储
    ——存储方式一:空格分隔,不换行;缺点:数据中不能存在空格,否则无法区分空格是数据之间还是数据内部
    ——存储方式二:逗号分隔,不换行,缺点:数据中不能存在逗号,原因同上
    ——其他存储方式:特殊符号分隔,缺点:根据定义选择不会出现的特殊符号,通用性差

7.3.3一维数据的处理

  1. 一维数据的读操作
>>> txt = open("a.txt",encoding="utf-8").read()
>>> ls = txt.split()
>>> ls
  1. 一维数据的写入操作
>>> ls = ['中国', '美国', '日本']
>>> ls
['中国', '美国', '日本']
>>> f = open("f.txt",'w',encoding="utf-8")
>>> f.write(' '.join(ls))  #字符串中的join方法,将join前面的字符串分割放到后边的join参数中的各个元素之间
8
>>> f.close()

你可能感兴趣的:(python,深度学习)