Python3文件的使用(例:自动轨迹绘制)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34195441/article/details/88074223

文件     文件是数据的抽象和集合

-文件是数据存储的一种形式,存储在辅助存储器上的数据序列

-文件展现形态:文本文件和二进制文件

1、文本文件(统一编码)

由单一特定编码组成的文件,如UTF-8编码,由于存在编码,也被看成是存储着的长字符串,适用于例如:.txt文件、.py文件

2、二进制文件(无统一编码)

直接由比特0和1组成,没有统一字符编码,一般存在二进制0和1的组织结构,即文件格式,适用于例如:png文件、.avi文件等

3、vs

f.txt文件保存:"中国是个伟大的国家!"

#文件形式打开文件:
tf = open("f.txt","rt")
print(tf.readline())
tf.close()

#二进制形式打开文件
bf = open("f.txt","rb")
print(bf.readline())
bf.close()

4、文件的使用

——文件的打开

<变量名> = open(<文件名>,<打开模式>)

变量名:文件句柄

文件名:文件路径和名称 源文件同目录可省路径

打开模式:文本 or 二进制     读 or 写

文件的打开模式 描述
'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError
'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖
'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError
'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容
'b' 二进制文件模式
't' 文本文件模式,默认值
‘+’ 与r/w/x/a一同使用,在原功能基础上增加同时读写功能

——文件的关闭

<变量名>.close()

——文件内容的读取

操作方法 描述
<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()

['中国是一个伟大的国家!']

——文件的全文本操作

#遍历全文本
#法一:
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.readlines():
    print(line)
fo.close()

#方法二   分行读入,分行处理
fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")
for line in fo:
    print(line)
fo.close()

——数据的文件写入

   

操作方法 描述
<f>.write(s)

向文件写入一个字符串或字节流

>>>f.write("中国是一个伟大的国家!")

<f>.writelines(lines)

将一个元素全为字符串的列表写入文件

<f>.seek(offset())

改变当前文件操作指针的位置,offset含义如下:

0 - 文件开头;1-当前位置  2-文件结尾

>>>f.seek(0)  #回到文件开头

#一个字符串列表,没有任何输出
fo = open("output.txt","w+")
ls =["中国","法国","美国"]
fo.writelines(ls)
for line in fo:
    print(line)
fo.close()

#写入一个字符串列表,有输出
fo = open("output.txt","w+")
ls = ["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
    print(line)
fo.close()
运行结果:中国法国美国

5、自动轨迹绘制

(1) 问题分析

需求:根据脚本来绘制图形?

不通过写代码而通过写数据绘制轨迹

数据脚本是自动化最重要的第一步

(2)基本思路

-定义数据文件格式(接口)

-编写程序,根据文件接口解析参数绘制图形

-编制数据文件

import turtle as t
t.title("自动轨迹绘制")
t.setup(800,600,0,0)    #画布
t.pencolor("red")       #画笔初始颜色
t.pensize(5)            #画笔的粗细
#数据读取
datals = []             #定义一个列表
f = open("D:\\qianfeng\\courses\\data.txt")  #打开data.txt文件
for line in f:          #读取遍历每一行
    line = line.replace("\n","")  #将换行改为空字符串
    '''以逗号分割成许多小字符串
        map是python提供的内嵌函数,无需import导入,
        使用:将第一个参数(函数的名字)的功能,作用于第二个参数(迭代类型)的每个元素
        line.split()形成一个列表,eval将其中每个元素的引号都去掉,去掉之后的类型再转化为list类型
        datals列表中的每个元素也都是一个列表
    '''
    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])

运行结果:

——理解方法思维

自动化思维:数据和功能分离,数据驱动的自动运行

接口化设计:格式化设计接口,清晰明了

二维数据应用:应用维度组织数据,二维数据最常用

——应用问题的扩展

扩展接口设计,增加更多控制接口

扩展功能设计,增加弧形等更多功能

扩展应用需求:发展自动轨迹绘制到动画绘制

         

猜你喜欢

转载自blog.csdn.net/qq_34195441/article/details/88074223