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      计算结果

原文地址:https://www.cnblogs.com/leihui/p/5569644.html