做网站 做好把我踢开/阿里云自助建站
文件的使用
文件的类型
意思就是有统一编码的就叫文本文件,没有统一编码的就叫二进制文件
在python中打开文本文件
就是把rt改为rb,就将它的二进制打印出来
文件的打开和关闭
一般在处理文件的时候要遵循一个特定步骤,这个步骤就是打开-操作-关闭
对于一个文件,不对它进行处理的时候,它体现的是一种文件的存储状态,此时文件在计算机的硬盘中存储,如果要操作一个文件,首先,要让这个文件变成占用状态。文件的存储状态和占用状态通过文件的打开和关闭进行转换
文件的打开
这里要注意的一点是如果使用\是反义符号,因此我们要使用/来替换,或者是\\表示转义的转义也就是\
文件的路径,就看你的根目录在哪里,通过绝对路径还是相对路径
文件的打开模式
文件的关闭
文件内容的读取
虽然这种办法很好,但是有弊端,如果这样的文本文件体量特别大,比如这个文件有100Gb,我们一次性将文件读入内存,将会耗损非常多的时间和资源,因此对大文件来将,一次性的读入文件的代价很大, 不建议
按数量读入,逐步处理办法就能解决这个弊端
数据的文件写入
这里要注意的是尽管我们此时调用的方法叫writelines,但是实际上,它并不是将列表元素中的每个元素当做一行写入,而是将它们直接拼接后写入
重新从文件开头读取,否则末尾读取是没有数据的,因此我们要使用seek(0)指针指向开头
彩蛋
import turtle as t
t.penup()
t.seth(-90)
t.fd(160)
t.pendown()
t.pensize(20)
t.colormode(255)
for j in range(10):t.speed(1000)t.pencolor(25*j,5*j,15*j)t.seth(130)t.fd(220)for i in range(23):t.circle(-80,10)t.seth(100)for i in range (23):t.circle(-80,10)t.fd(220)
虽短却小有创意
自动轨迹绘制
需求:根据脚本来绘制图形?
不通过写代码而通过写数据绘制轨迹
数据脚本是自动化最重要的第一步
基本思路
步骤1:定义数据文件格式(接口)
步骤2:编写程序,根据文件接口解析参数绘制图形
步骤3:编制数据文件
每个人定义的数据接口都不同,这里我们按照自己的定义
300,0,144,1,0,0
一行表示一次操作
每一行中有六个数据,中间用逗号分割
其中第一个位置:表示当前位置开始向前行进的一个距离
第二个数据表示转向判断 0:表示左转 1:表示右转
第三个参数表示:向左转或向右转的绝对转向角度
第四,第五,第六三个参数指画这段曲线或直线所使用的rgb三个通道的颜色,而这RGB三个通道颜色的取值范围是0到1之间的浮点数
这段代码使用Turtle库自动绘制数据文件中指定的图案。具体步骤如下:
导入Turtle库,设置窗口标题为“自动轨迹绘制”,并设置窗口大小为800x600。
import turtle as t
t.title('自动轨迹绘制')
t.setup(800, 600, 0, 0)
设置画笔颜色为红色,画笔粗细为5。
t.pencolor("red")
t.pensize(5)
打开数据文件,读取其中的数据,并将其存储在列表datals中。
datals = []
f = open("data.txt")
for line in f:line = line.replace("\n","")datals.append(list(map(eval, line.split(","))))
f.close()
使用Turtle库自动绘制数据中指定的图案。对于每一行数据,按照以下规则进行操作:
将画笔颜色设置为RGB三个通道颜色的值。
向前画指定长度的线段。
如果转向判断为1,向右转指定的角度;否则,向左转指定的角度。
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])
这段代码可以帮助您将数据文件中的数据自动转化为图形。如果您想要绘制不同的图案,可以修改数据文件或修改代码中的参数。例如,您可以尝试修改数据文件中的RGB颜色值或距离、角度值来绘制不同的图案。
完整代码
#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/4/5 19:49
# @File : 自动轨迹绘制.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])