zoukankan      html  css  js  c++  java
  • 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('
    ','')                #遍历字符串,用空字符代替转义符
    
    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()

    结果:

    蜗牛跑的慢,是因为没有腿儿!
  • 相关阅读:
    怎样在黑窗口中查找各种端口
    [Selenium] 数字显示的月份转换为英文显示
    [Selenium] 根据预期的日期格式,获取昨天的日期
    [Selenium] 使用Javascript选中Input框里的内容,然后清空
    Java中for循环遍历List的两种方法
    [Selenium]点击Calendar控件后,Calendar dialog很快消失
    springboot @Slf4j 配置
    springboot线程中获取spring beans
    org.junit.Test 注解失效的问题The import org.junit cannot be resolved
    二叉树java遍历实现
  • 原文地址:https://www.cnblogs.com/xier/p/10445815.html
Copyright © 2011-2022 走看看