python:文件的逐行操作


 

逐行遍歷文件:

方法一:一次讀入,分行處理: 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('\n','')                #遍歷字符串,用空字符代替轉義符\n
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('\n')             #對列表進行遍歷,rstrip()去掉每個列表元素的轉義符\n
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()

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM