Python语言程序设计

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

2018-04-26  本文已影响19人  努力奋斗的durian

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

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

1.文件的使用

1.1单元开篇

1.2文件的类型


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



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


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


"rt"是以文本形式打开


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

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

1.3文件的打开和关闭

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

1.4文件内容的读取

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


1.5数据的文件写入

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

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

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

1.6单元小结

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

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

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

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])

>>>x = 7
>>> eval( '3 * x' )
21
>>>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"自动轨迹绘制"举一反三

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

3.1单元开篇


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

3.2数据组织的维度


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


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

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

字典类型存在高维数据.

3.4一维数据的表示

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

3.5一维数据的存储

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


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

3.6一维数据的处理

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



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


#!/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']

str.join(sequence)

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

以上实例输出结果如下:

a-b-c

3.7单元小结

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

4.1单元开篇

4.2二维数据的表示


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


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

4.3CSV格式与二维数据存储


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



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


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

4.4二维数据的处理

4.5单元小结

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])
上一篇下一篇

猜你喜欢

热点阅读