IO操作是每种程序设计语言都会设计的模块,python的io操作设计的和C语言很类似,比较简便实用.
反观Java语言对于io操作设计的模块就比较抽象和灵活,这也导致java的io学习成本远比Python语言的io操作高很多。
但是java io框架的设计确实是非常优雅的,值得我们去学习其源码实现。
io操作通常指定就是输入和输出,通常载体为文件,即io操作也很多时候是文件的操作。
Python3.x进行文件读写的函数为open(filename,mode)
通过open
f=open(filename,mode)
通过file(Python2.x存在该函数,3.x之后不存在了)
f=file(filename,mode)
说实话Python3.x不兼容Python2.x对于学习来说确实是存在一点麻烦的
关于读写文件模式
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
r : 以只读方式打开文件(默认)
w : 以写方式打开文件,可向文件中写入信息。如果文件存在,会清空文件,再写入新内容。
a : 以追加模式发开文件(如果文件不存在就先创建),文件一打开文件指针就会自动移动到文件末尾(这就是追加模式)
+ : 以读写方式打开文件
t : 以文本模式打开文件(默认)
b : 以二进制文件打开文件
备注:常用的模式a+、r+、w+
需要注意的以这种模式打开时是否会覆盖原文件,所以通常操作文件时会先检查文件是否存在。
Python操作文件方法比较少而且直观
f.close() 关闭文件,任何语言资源的操作都要记得及时关闭。
f.fileno() 获得文件描述符,是一个数字
f.flush() 刷新刷出缓存
f.read([count]) 读出文件,如果有count,则读出count个字节。
f.readline() 读取一行信息
f.readlines() 读取所有行存放到一个列表容器中
f.tell() 获得文件指针位置
f.truncate([size]) 截取文件,使文件的大小为size
f.write(string) 把string字符串写入到文件
f.writelines(list) 把list容器中的字符串一行行的写入到文件,连续写入没有换行。
文本文件拷贝
def copy_text_file():
f1=open("e:/usepython/io.txt","r")
f2=open("e:/usepython/ioCopy.txt","w+")
flag=True
while flag:
line=(f1.readline()) # 一行行读
if len(line)>0: # 只要有内容就写,没内容就跳出循环体
f2.write(line)
else:
flag=False
f1.close() # 资源操作都要最后都要关闭
f2.close()
二进制文件拷贝
def copy_binary_file():
# 关键点就在于打开文件方式
f1=open("e:/usepython/2.jpg","rb+")
f2=open("e:/usepython/2Copy.jpg","wb+")
flag=True
while flag:
line=(f1.readline())
if len(line)>0:
f2.write(line)
else:
flag=False
f1.close()
f2.close()
备注:我只想说Python IO操作确实非常简单方便。
Python操作文件确实比较简单方便,通常要操作文件都会引入io模块和os模块(操作文件本身判断文件是否存在等方法)。我只想说这尼玛太屌了吧,当初学习Java io和nio可以说被整的死去活来啊,python就那么简单。
1、http://www.ibiblio.org/swaroopch/byteofpython/read/io.html
2、https://docs.python.org/3/library/io.html