Skip to main content
 Web开发网 » 编程语言 » Python语言

python文件读取和数据接口简单定义

2021年11月27日11250百度已收录

打开文件文件具有两种形式:文本形式和二进制形式,在Python中使用open(,)函数打开指定路径的文件,用clise()关闭文件,即解除文件的占用状态。

文件打开模式

含义

'r'

只读模式打开,文件不存在。报错:FileNotFoundError

'w'

覆盖写入,文件不存在则创建,存在则完全覆盖写入

'x'

创建写模式,若文件已存在报错:FileExistsError

'a'

追加写模式,文件不存在则创建,存在则在文件最后追加内容

'b'

二进制文件模式

't'

文本文件模式,默认值

'+'

与r/w/x/a一同使用,在原功能上增加同时读写的功能

文件内容读取文件打开模式

含义

f.read(size=-1)

读取全部内容,若给出参数,读取前size长度

f.readline(size=-1)

读入一行内容,如果给出参数,读入该行前size长度

f.readlines(hint=-1)

读入所有内容,以每行为元素形成列表,

如果给出参数,读入前hint行

文件写入数据文件打开模式

含义

f.write(s)

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

f.writelines(lines)

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

f.seek(offset)

改变当前文件操作指针的位置,0:文件开头;

1当前位置;2文件结尾

用文本文件定义数据接口,实现程序与数据分离。已知y=ax^2+bx+c为平面抛物线方程,我们可以定义一个文本文件的数据接口,利用python海龟作图体系绘制该抛物线的曲线,同时允许用户设置绘制条数。下面我们来实现这一操作。

1定义数据文件接口接口文件放在程序当前目录下的:"数据\抛物线.txt"路径下,本例中文件第一行、第三行、第五行和第七行为提示文本,程序读取忽略。第二行规定是否显示平面直角坐标系,第四行规定绘制抛物线的条数,第六行设置x的取值范围,第八行开始每一行表示一条抛物线的参数。

<提示文本>请设置是否显示直角坐标系,0表示不显示,1表示显示:

1

<提示文本>请设置需要绘制的抛物线数量:

3

<提示文本>请设置x的取值范围和绘制精度,其中1个单位长度等于30个像素,用“,”分隔。例如:x=[-3,1],精度为1的数据格式为:-3,1,0.01

-3,1,0.01

<提示文本>每一行一行设置设置抛物y=ax^2+bx+c的参数a,b,c值,并设置三个颜色通道值规定曲线的颜色,用“,”分隔。例如:y=x^2+2x+1红色的数据格式为:1,2,1,1,0,0

1,2,1,1,0,0

-1,-2,-1,0,1,0

2,4,1,0,0,1

2编写处理程序本程序主要包括get_data(url)函数用来获取数据文件的相关信息,将数据文件的第二行、第四行、第六行到最后一行数据以字典的形式返回,draw_xy()绘制平面直角坐标体系,draw(cs_list)绘制一条抛物线函数,main()主函数控制绘制流程

get_data(url)函数代码获取接口文件参数

def get_data(url): data = { "是否加载平面直角坐标系": 0, "绘制条数": 0, "绘制范围及精度": [], "参数": [], } f = open(url, "rt", encoding="utf-8") file_data = f.readlines() f.close() data["是否加载平面直角坐标系"] = eval(file_data[1].replace('\n', "")) data["绘制条数"] = eval(file_data[3].replace('\n', "")) data["绘制范围及精度"] = list(map(eval, file_data[5].replace('\n', "").split(","))) for i in range(7, len(file_data)): data["参数"].append(list(map(eval, file_data[i].replace('\n', "").split(",")))) return datadef draw(cs_list, x)函数代码绘制接口文件中规定的抛物线

def draw(cs_list, x): turtle.pu() turtle.goto(x[0] * 30, (cs_list[0] * pow(x[0], 2) + cs_list[1] * pow(x[0], 1) + cs_list[2]) * 30) turtle.pd() turtle.pencolor((cs_list[3], cs_list[4], cs_list[5])) i = x[0] while i <= x[1]: turtle.goto(i * 30, (cs_list[0] * pow(i, 2) + cs_list[1] * pow(i, 1) + cs_list[2]) * 30) i += x[2]def draw_xy()函数代码绘制平面直角坐标系

def draw_xy(): '''绘制直角坐标系''' turtle.pencolor(0, 0, 0) turtle.pu() turtle.goto(0, 0) turtle.seth(0) turtle.bk(330) turtle.pd() turtle.fd(30) turtle.pu() # 绘制x轴 for i in range(-300, 330, 30): turtle.seth(-90) turtle.fd(10) turtle.pd() turtle.write(i / 30, font=("楷体", 5, "normal")) turtle.pu() turtle.seth(90) turtle.fd(15) turtle.pd() turtle.seth(-90) turtle.fd(5) turtle.seth(0) turtle.fd(30) turtle.pu() turtle.seth(-135) turtle.fd(5) turtle.seth(-90) turtle.fd(10) turtle.pd() turtle.write('x', font=("楷体", 10, "normal")) turtle.pu() turtle.seth(90) turtle.fd(10) turtle.seth(45) turtle.pd() turtle.fd(5) turtle.seth(135) turtle.fd(5) turtle.pu() turtle.goto(0, -330) turtle.seth(90) turtle.pd() turtle.fd(30) turtle.pu() # 绘制y轴 for i in range(-300, 330, 30): turtle.seth(180) turtle.fd(10) turtle.pd() turtle.write(i / 30, font=("楷体", 5, "normal")) turtle.pu() turtle.seth(0) turtle.fd(15) turtle.pd() turtle.seth(180) turtle.fd(5) turtle.seth(90) turtle.fd(30) turtle.pu() turtle.seth(-45) turtle.fd(5) turtle.seth(90) turtle.fd(2) turtle.pd() turtle.write('y', font=("楷体", 10, "normal")) turtle.pu() turtle.seth(-90) turtle.fd(2) turtle.seth(135) turtle.pd() turtle.fd(5) turtle.seth(-135) turtle.fd(5) turtle.pu()main()函数控制程序执行流程

def main(): url = r".\数据\抛物线.txt" data = get_data(url) turtle.setup(800, 800, 0, 0) x = data['绘制范围及精度'] # 分别绘制抛物线 for i in data['参数']: draw(i, x) if data['是否加载平面直角坐标系'] == 1: draw_xy() # 加载坐标系 turtle.hideturtle() turtle.done运行main()得到绘制效果。

python文件读取和数据接口简单定义  Python接口 第1张

绘制效果

本文全部代码import turtleimport mathdef get_data(url): data = { "是否加载平面直角坐标系": 0, "绘制条数": 0, "绘制范围及精度": [], "参数": [], } f = open(url, "rt", encoding="utf-8") file_data = f.readlines() f.close() data["是否加载平面直角坐标系"] = eval(file_data[1].replace('\n', "")) data["绘制条数"] = eval(file_data[3].replace('\n', "")) data["绘制范围及精度"] = list(map(eval, file_data[5].replace('\n', "").split(","))) for i in range(7, len(file_data)): data["参数"].append(list(map(eval, file_data[i].replace('\n', "").split(",")))) return datadef draw_xy(): '''绘制直角坐标系''' turtle.pencolor(0, 0, 0) turtle.pu() turtle.goto(0, 0) turtle.seth(0) turtle.bk(330) turtle.pd() turtle.fd(30) turtle.pu() # 绘制x轴 for i in range(-300, 330, 30): turtle.seth(-90) turtle.fd(10) turtle.pd() turtle.write(i / 30, font=("楷体", 5, "normal")) turtle.pu() turtle.seth(90) turtle.fd(15) turtle.pd() turtle.seth(-90) turtle.fd(5) turtle.seth(0) turtle.fd(30) turtle.pu() turtle.seth(-135) turtle.fd(5) turtle.seth(-90) turtle.fd(10) turtle.pd() turtle.write('x', font=("楷体", 10, "normal")) turtle.pu() turtle.seth(90) turtle.fd(10) turtle.seth(45) turtle.pd() turtle.fd(5) turtle.seth(135) turtle.fd(5) turtle.pu() turtle.goto(0, -330) turtle.seth(90) turtle.pd() turtle.fd(30) turtle.pu() # 绘制y轴 for i in range(-300, 330, 30): turtle.seth(180) turtle.fd(10) turtle.pd() turtle.write(i / 30, font=("楷体", 5, "normal")) turtle.pu() turtle.seth(0) turtle.fd(15) turtle.pd() turtle.seth(180) turtle.fd(5) turtle.seth(90) turtle.fd(30) turtle.pu() turtle.seth(-45) turtle.fd(5) turtle.seth(90) turtle.fd(2) turtle.pd() turtle.write('y', font=("楷体", 10, "normal")) turtle.pu() turtle.seth(-90) turtle.fd(2) turtle.seth(135) turtle.pd() turtle.fd(5) turtle.seth(-135) turtle.fd(5) turtle.pu()def draw(cs_list, x): turtle.pu() turtle.goto(x[0] * 30, (cs_list[0] * pow(x[0], 2) + cs_list[1] * pow(x[0], 1) + cs_list[2]) * 30) turtle.pd() turtle.pencolor((cs_list[3], cs_list[4], cs_list[5])) i = x[0] while i <= x[1]: turtle.goto(i * 30, (cs_list[0] * pow(i, 2) + cs_list[1] * pow(i, 1) + cs_list[2]) * 30) i += x[2]def main(): url = r".\数据\抛物线.txt" data = get_data(url) turtle.setup(800, 800, 0, 0) x = data['绘制范围及精度'] # 分别绘制抛物线 for i in data['参数']: draw(i, x) if data['是否加载平面直角坐标系'] == 1: draw_xy() # 加载坐标系 turtle.hideturtle() turtle.donemain()

评论列表暂无评论
发表评论
微信