逐行遍历文件:
方法一:一次读入,分行处理: readlines()
缺点:一次读入所有信息,对于大文件来说会消耗很多计算机内存
1 fname = input('请输入要打开的文件名称:') 2 fo = open(fname,"r") 3 for line in fo.readlines(): #f.readlines()读入所有行,将文件以每行为元素形成列表(每一行都是一个长字符串) 4 print(line) 5 fo.close()
方法二:分行读入,逐行处理:直接遍历文件句柄
1 fname = input("请输入要打开的文件名称:") 2 fo = open(fname,"r") 3 for line in fo: #fo是文件句柄 4 print(line) 5 fo.close()
有利于处理极大文件。
实例:自动轨迹绘制用两种方式实现:
注:这段代码用到了eval()函数,所以txt数据文件中不能出现类似060,以0开头的数字,否则会报错“syntaxError: invalid token”
1 #Autotrackdraw.py #方法二 2 import turtle as t 3 4 t.setup(800,600,0,0) 5 t.pensize(5) 6 t.pencolor("red") 7 8 #数据读取 9 f = open("test.txt") #只读方式打开文件为:文件句柄f 10 l = [] #创建一个空列表 11 for ch in f: #用for...in.逐一处理每一行 12 ch = ch.replace(' ','') #遍历字符串,用空字符代替转义符 13 l.append(list(map(eval,ch.split(","))))#将一行字符串以逗号分割形成列表,并对列表的每个元素用eval()函数处理, 14 print(l) #然后以子列表加入父列表。 15 f.close() 16 for i in range(len(l)): #对列表所有元素循环,按参数执行画笔程序。 17 t.pencolor(l[i][3],l[i][4],l[i][5]) #i[1,2,3,4,5]: 18 if l[i][1] == 0: #i[0]:行进距离 19 t.left(l[i][2]) #i[1]:转向判断 20 else: #i[2]:转向角度 21 t.right(l[i][2]) #i[3]-i[5]:RGB颜色 22 t.fd(l[i][0]) 23 t.done()
1 #AutotrackdrawV2.py #方法一 2 import turtle as t 3 4 t.setup(800,600,0,0) 5 t.pensize(5) 6 t.pencolor("red") 7 8 with open('test.txt','r') as f1: #用with打开文件,用readlines()读入所有行,以每行为元素生成列表。 9 list1=f1.readlines() 10 for i in range(len(list1)): 11 list1[i]=list1[i].rstrip(' ') #对列表进行遍历,rstrip()去掉每个列表元素的转义符 12 list1[i]=list(eval(list1[i])) #每个列表元素仍然为字符串,用eval()去掉引号,转换为元组,再用list()转换为子列表 13 14 print(list1) 15 16 for i in range(len(list1)): 17 t.pencolor(list1[i][3],list1[i][4],list1[i][5]) 18 if list1[i][1]==0: 19 t.left(list1[i][2]) 20 else: 21 t.right(list1[i][2]) 22 t.fd(list1[i][0]) 23 t.done()
结果: