第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)

文章原创,最近更新:2018-04-26

1.文件的使用
2.实例11:自动轨迹绘制
3.一维数据的格式化和处理
4.二维数据的格式化和处理
5.所有代码汇总
原链接 语言程序设计北京理工大学

1.文件的使用

1.1单元开篇

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第1张图片

1.2文件的类型

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第2张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第3张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第4张图片

文本文件就是一个字符串.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第5张图片

二进制文件,相当于图片以及视频这类的文件.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第6张图片
  • 以文本形式理解:
    打印出来的是"中国是个伟大的国家"
  • 以二进制形式理解:
    以二进制构成的字符串.相当于"中国是个伟大的国家"对应储存形态的二进制形式.
  • 两者之间的区别
    通过文本形式可以更好的理解这段信息,而二进制形式是最原始的存储格式.在使用的时候,如果一个文件是文本文件,又经需要对里面的字符进行理解,我们就需要用文本形式对其打开.

仅以存储的形态,那就使用二进制对其打开储存并进行处理.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第7张图片

"rt"是以文本形式打开

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第8张图片

"rb"是以二进制形式打开

可以选择二进制以及文本形式打开文件,选择哪种方式?是跟程序以及功能有关.

1.3文件的打开和关闭

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第9张图片
  • 处理文件之前,先要open文件,处理文件之后,要close文件.
  • 打开文件后,可以对文件进行数据读入,以及数据输出.简称为读文件和写文件.
  • 提供了三个常用的读文件函数,分别如下:
    • a.read(size)
    • a.readline(size)
    • a.readlines(hint)
  • 提供了三个常用的写文件函数,分别如下:
    • a.write(s)
    • a.writeline(lines)
    • a.seek(offset)
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第10张图片
  • 第一个参数是文件路径和名称,指当前要打开的文件与当前程序所对应位置直接的相互关系,我们要知道打开哪个文件.
  • 第二个参数是打开模式,是以文本形式打开还是以二进制形式打开.打开过程是读信息还是写信息.
  • 文件打开之后用一个抽象的变量叫文件句柄来表示.
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第11张图片
  • 文件路径包含绝对路径相对路径的名称,共四种:
    比如在windows平台,保持在D盘,PYE目录下,文件名称为f.txt.(D:\PYE\f.txt)我们在打开文件的时候,需要绝对路径,可以有2种方式,如下:

    • 第一种:文件的路径,如"D:/PYE/f.txt"
      需要注意:在windows下,文件的路径方式是 \ 方式,但是斜杠在python字符串当中,被解析为转义符.所以一般来讲,我们用反斜杠/来替代斜杠
    • 第二种:文件的路径,如"D:\PYE\f.txt"
      需要注意:由于在python而言,\斜杠是转义符,而\表示的是\斜杠
  • 文件的相对路径,是指打开的路径与当前程序直接的路径,如果当前的程序存储在D盘根目录下,希望打开PYE根目录下的f.txt文件,可以有2种方式,如下:

    • 第一种:文件的路径,如"./PYE/f.txt"
      指的是从当前可执行的程序的当前目录起,找它的PYE目录,以及这个目录下的f.txt文件.
    • 第二种:文件的路径,如"f.txt"
      指的是当前的程序和文件在相同的目录里,可以直接打开f.txt这个文件.

对于文件路径参数中,无论采取哪种方式,最终目的是,要用程序在运行当前目录下,能够很好有效的找到这个文件,无论是绝对路径还是相对路径.只要能够找到这个文件并指定这个文件的正确名称,那么读取这个文件就会比较顺利.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第12张图片
  • "r",如果返回FileNotFoundError,可以用try/except用来捕捉异常,并进行处理.
  • "x",如果返回FileExistsError,可以用try/except用来捕捉异常,并进行处理.
  • "b",是以二进制的文件模式打开
  • "t",是以文本的文件模式打开
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第13张图片
  • "rt"模式,指的是"r"和"t",指的就是默认情况的方式.如果使用"rt"指的就是默认值.
  • 根据文件的需求,来指定打开模式.
  • 无论哪种方式,要确定是文本形式还是二进制的方式打开文件,还是只读模式还是各种写入模式.组合起来就是你使用文件的打开模式.


    第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第14张图片

    注意:写了一个程序,只有打开文件,而没调用文件f.close()关闭这个文件,在程序运行中这个文件始终是被打开状态,但是程序退出.python解析器会自动的把这个文件关闭.写程序尽可能的增加f.close()这个函数.


    第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第15张图片
  • "rt"以文本读的形式打开
  • "rb"以二进制读的形式打开

1.4文件内容的读取

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第16张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第17张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第18张图片
  • 用read()的方法读取文件所有的信息,返回字符串
    弊端:如果这个文件特别大,有100个gb,一次性将文件读入内存,将会耗非常多的时间和资源.对于大文件而言,一次性读入文件,代价很大.

  • 处理文件可以分批分阶段的进行处理,就是以下图片的处理的第二种办法:

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第19张图片
  • 分阶段,按数量读入,逐步处理的办法,处理大文件更加可行有效.
  • fo.read(2),每次读入2个字节
  • 只要读入的信息不为空,就将持续处理下去.直到空的为止,然后退出.
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第20张图片
  • 一次性读入,进行遍历以分行处理的方法.
  • fo.readlines()对所有的行以列表的形式,line是其中列表的一个元素.

弊端:一次性读入,会消耗很大的内存.以逐行的方式,以大文件的方式读出.并由程序再进行处理,再进行下一行好点.具体如下截图方法:


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第21张图片
  • 这样的模式是分行读入,逐行处理的思路.对极大的文件处理,非常有效.
  • fo这里指的是文件句柄,使用for in这样的组合,可以对文件尤其是文本文件,进行逐行处理.

1.5数据的文件写入

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第22张图片

f.writelines()是直接将列表的元素拼接写入,没有换行,没有空格,将各个元素直接拼接.然后写入文件.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第23张图片

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第24张图片

文件写入后指针在文件的最后面,即下一次写入文件的位置.

  • 如果调用for in的方式遍历一行,打印输出的时候,指的是当前位置处到结尾处取出一行,并且打印出来.
  • 而我们写入的信息在指针的上方,并不在指针的下方,因此之前的那行代码并不能输出我们写过的信息.
  • 为了输出我们写过的信息,需要调整指针回到初始位置,从初始位置再进行逐行遍历.就能把文件全部的信息打印输出.增加一行代码fo.seek(0).

注意:指针位置对文件的影响

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第25张图片

1.6单元小结

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第26张图片

2.实例11:自动轨迹绘制

2.1"自动轨迹绘制"问题分析

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第27张图片
  • 之前学过turtle库其中的函数以及语句,绘制图形.用程序写代码的形式,来绘制图形.
  • 数据脚本自动化是非常重要的过程.
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第28张图片

2.2"自动轨迹绘制"实例讲解

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第29张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第30张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第31张图片

list(map(eval,line.split(",")))就是列表中的元素,都去掉了字符串的引号,变成了数字.之后用append放到datals列表.通过for in 逐一循环,去绘制我们的图形.

  • 代码如下:
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(","))))
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])

  • 输出结果如下:


    第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第32张图片
  • 数据文件,命名为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

  • Python eval() 函数

    • 描述
      eval() 函数用来执行一个字符串表达式,并返回表达式的值
    • 返回值
      返回表达式计算结果。
    • 实例
      以下展示了使用 eval() 方法的实例:
>>>x = 7
>>> eval( '3 * x' )
21
  • python map()函数
    • 描述
      map() 会根据提供的函数对指定序列做映射。
      第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
      语法
    • map() 函数语法:map(function, iterable, ...)
    • 参数
      function -- 函数,有两个参数
      iterable -- 一个或多个序列
    • 返回值
      Python 3.x 返回迭代器。


      第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第33张图片
    • 实例
      以下实例展示了 map() 的使用方法:
>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]
 
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

2.3"自动轨迹绘制"举一反三

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第34张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第35张图片
  • 绘图就是一种功能.绘制的进行由数据进行驱动.数据驱动是数据运行很重要的方法.这也是自动化思维的一种体现.
  • 如何设置一种格式文件,使程序的交互变得很容易.使用逗号,分割数字,做接口的格式化设计
  • 使用二维列表,表达数据文件.简化了程序与接口之间的关系.


    第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第36张图片
  • 接口设计:除了画笔的颜色,可以增加画笔的粗细,以及左转右转的其他转向方式.可以设置跳转区域到某一行中.
  • 功能设计:除了左转右转,是否可以增加弧形等功能.
  • 应用需求:轨迹绘制的基础绘制是线条,我们能否由线条组成小的图形.自动轨迹绘制变成动画绘制.这也是需求的改变.而动画绘制,数据驱动是更重要的思想方法.

3.一维数据的格式化和处理

3.1单元开篇

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第37张图片

掌握一维数据存储以及处理等相关操作能力.

3.2数据组织的维度

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第38张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第39张图片

一组数据可以采取线性方式的组织,还是采用二维方式的组织.这就构成了不同的数据组织形式.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第40张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第41张图片

比如:2017中国大学排行榜.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第42张图片

比如:中国大学排行榜有分为2016年以及2017年的排行榜,有时间维度的拓展,就变成了多维数据.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第43张图片

字典类型存在高维数据.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第44张图片

3.4一维数据的表示

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第45张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第46张图片

使用集合以及列表就可以表达一维数据.

3.5一维数据的存储

一维数据存储在硬盘或文件中.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第47张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第48张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第49张图片

无论是逗号分割还是空格分割,还是特殊符合的分割.都有缺点,都不可以在元素中出现与分割符相同的.字符.通用性较差,但是一维数据都是采用这样的思路

3.6一维数据的处理

这里说的处理指的是列表与集合等方式的转换.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第50张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第51张图片

比如:从空格中的文件读入数据,表示列表形式.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第52张图片
  • Python split()方法
    • 描述
      Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串
    • 语法
      split() 方法语法:str.split(str="", num=string.count(str)).
    • 参数
      str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
      num -- 分割次数。
    • 返回值
      返回分割后的字符串列表。
    • 实例
#!/usr/bin/python

str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );
print str.split(' ', 1 );

以上实例输出结果如下:

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第53张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第54张图片
  • Python join()方法
    • 描述
      Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

    • 语法
      join()方法语法:

str.join(sequence)

  • 参数
    sequence -- 要连接的元素序列。
    返回值
    返回通过指定字符连接序列中元素后生成的新字符串。

  • 实例

str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

以上实例输出结果如下:

a-b-c

3.7单元小结

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第55张图片

4.二维数据的格式化和处理

4.1单元开篇

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第56张图片

4.2二维数据的表示

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第57张图片

这里的列表不是普通的列表,是指二维列表.其中每个数据代表二维数据的一行,或者一列.若干行若干列形成的外围列表,就构成了我们所说的二维列表.二维列表可以处理几乎所有相关的二维列表相关的数据操作.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第58张图片

使用两层for循环遍历每一个元素.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第59张图片

4.3CSV格式与二维数据存储

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第60张图片

用逗号分割词的一种存储方式.


第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第61张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第62张图片

如果csv元素有逗号(,),则在数据两侧加引号,这个逗号不是分割元素的逗号.所以在判断程序的时候,在判断程序的外侧是否有引号.还有另一种方法,在数据有逗号的地方,增加转义符/.

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第63张图片

先行后列获得其中的元素.

4.4二维数据的处理

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第64张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第65张图片
第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第66张图片

4.5单元小结

第7周文件和数据的格式和处理-Python语言程序设计(学习笔记)_第67张图片

5.所有代码汇总

#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(","))))
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.rt(datals[i][2])
    else:
        t.lt(datals[i][2])

你可能感兴趣的:(第7周文件和数据的格式和处理-Python语言程序设计(学习笔记))