标签:
文件模式
‘r‘ | 读模式 |
‘w‘ | 写模式 |
‘a‘ | 追加模式 |
‘b‘ | 二进制模式 |
‘+‘ | 读/写模式 |
注意:
‘b‘ : 二进制模式 可添加到其他模式中使用
‘+‘ : 读/写模式 可添加到其他模式中使用
几个概念:
为什么使用二进制模式?:
我们都知道数据存储的时候都是以二进制的形式存储的,例如文本和图像。
这会有一个问题,不同操作系统中的换行符不一样,例如在UNIX中的规范是\n表示结束一行另起一行,而在windows中却是\r\n。
若在python中以文本形式打开文件,python会做一些自动的处理,即将\r\n和\n的互换,但是这样却会破坏二进制数据。
故我们在需要保护原始数据的情况下会使用二进制的形式打开文件。
缓冲区的概念:
在文件打开函数(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()
注意:
因为返回的行会带有‘\n‘故我对他进行了一个除空(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 计算结果
标签:
原文地址:http://www.cnblogs.com/leihui/p/5569644.html