• Python 基本文件操作


    文件模式


     

    'r'

    读模式

    'w'

    写模式

    (清除掉旧有数据并重新开始)

    'a' 追加模式
    'b' 二进制模式
    '+' 读/写模式

     

    注意:
      'b'   : 二进制模式 可添加到其他模式中使用

      '+'  : 读/写模式 可添加到其他模式中使用

    几个概念:
      为什么使用二进制模式?:
        我们都知道数据存储的时候都是以二进制的形式存储的,例如文本和图像。

        这会有一个问题,不同操作系统中的换行符不一样,例如在UNIX中的规范是 表示结束一行另起一行,而在windows中却是 。

        若在python中以文本形式打开文件,python会做一些自动的处理,即将 和 的互换,但是这样却会破坏二进制数据。

        故我们在需要保护原始数据的情况下会使用二进制的形式打开文件。

      缓冲区的概念:
        在文件打开函数(open)中的第三个参数,控制着缓冲区的大小(由于参数可正可负,取绝对值即可)。

        那什么是缓冲区呢?

          即使用内存代替硬盘,让程序更快,更新的数据若无特殊的函数调用(close()或flush())是不会回写到硬盘中的。

      

      为什么要关闭文件:

        由于缓冲区的存在,关闭文件的意义就好理解了,就是为了使更改后的数据回写到硬盘中。

        当然也可以不手动关闭文件,因为程序在执行完毕后会自动关闭文件,但是这是习惯问题,好的习惯总是会受用一生的。

    文件操作的几个基本函数:

    read(n) 读取[指定]字符串
    readline() 读取一行
    readlines() 读取全部行,返回值为一个列表
    write() 写入数据
    writelines() 写入一个list
    seek() 重定向,重新指定文件指针(c语言中的概念)
    tell() 返回当前文件指针位置

     

    注意:
      其中可能有些形参我没标注上,但是函数的功能是一目了然的。

    文件迭代器


    一个字符一个字符的读取文件: (使用read())

    1 f = open('20160608.txt','r')
    2 char = f.read(1)
    3 while char:
    4     print (char)
    5     char = f.read(1)

    一行一行的读取文件:(使用readline() / readlines() / fileinput)

    readline()

    1 f = open('20160608.txt','r')
    2 line = f.readline()
    3 while line:
    4     line = line.strip()
    5     print (line)
    6     line= f.readline()

    注意:

      因为返回的行会带有' '故我对他进行了一个除空(strip())的处理

    readlines()

    1 f = open('20160608.txt','r')
    2 lines = f.readlines()
    3 for line in lines:
    4     print (line.strip())

    fileinput

    1 import fileinput
    2 for line in fileinput.input('20160608.txt'):
    3     print (line.strip())

    文件迭代还更简单点么? 能!

    1 f = open('20160608.txt','r')
    2 for x in f:
    3     print (x.strip())

    在python2.2后文件对象就是可迭代的了。这体现出了python的优雅

    最后


    记得以前用cpp写了一个计算两个文件中数字相加之和的程序, 这次用python写写试试,觉得写得贼烂,还是一通c++的思路,只是函数上简洁了好多

     1 def ToNumberList(L):
     2     newL = []
     3     for l in L:
     4         for x in l.split(' '):
     5             newL.append(x)
     6     return newL
     7 #将读取的列表转为元素都是一个一个元素的列表
     8 try:
     9     data1 = open('data1.txt','r')
    10     data2 = open('data2.txt','r')
    11     data1List = data1.readlines();
    12     data2List = data2.readlines();
    13     newdata1 = ToNumberList(data1List)
    14     newdata2 = ToNumberList(data2List)
    15 
    16     for i in range(len(newdata1)):
    17         print (int(newdata1[i]) + int(newdata2[i]))
    18     
    19 finally:
    20     data1.close()
    21     data2.close()

                      

      data1              data2      计算结果

  • 相关阅读:
    C# 正则表达式学习笔记(三)
    由于WEB服务器上的"ISAP"和"CGI"限制列表设置,无法提供您请求的页面——错误解决
    用户IIS APPOOL\Classic.NET AppPool 登陆失败——错误解决
    silverlight 学习笔记 (二): silverlight的开发模式
    CAB学习():使用SCSF创建shell的过程
    关于css及安全配置的注意事项
    silverlight 学习笔记 (四): MVVM+WCF Ria开发架构
    silverlight 学习笔记 (三): silverlight中的数据绑定
    软件开发了10年,迷茫了
    silverlight 学习笔记 (五): MVVM Light Toolkits 之 RealCommand
  • 原文地址:https://www.cnblogs.com/leihui/p/5569644.html
Copyright © 2020-2023  润新知