提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。
Python的流(I/O)操作,最简单的其实就是输入和输出,输出我们都知道使用输出函数
print( str , end = '\n')
但是Python的输入却有两个方法,一个是我们最常用的 input,但是其实Python还有一个raw_input函数也可以输入,那么它们的区别在哪里呢?
raw_input([prompt]) 从标准输入读取一个行,就是键盘输入的数据,并返回一个字符串(去掉结尾的换行符),prompt 是提示语句
例如:
str = raw_input("请输入:")
print "你输入的内容是: ", str
结果:
请输入:Hello Python!
你输入的内容是: Hello Python!
但是input,这个函数除了支持raw_input同样的功能之外,它还有一个特别的特点,它可以识别输入数据中的Python代码
str = input("请输入:")
print "你输入的内容是: ", str
例如:
输入:[x*5 for x in range(2,10,2)]
结果:
你输入的内容是: [10, 20, 30, 40]
再向深层次学习流操作,那就要说说Python和其他语言一样都有的操作文件API,且Python的文件API更加简洁
open(name,mode,buffering) name是文件路径,mode是访问模式,该方法会返回一个文件对象,buffering是一个寄存区,也就是字符缓冲区的标识,如果 buffering 的值被设为 0,文件就不会被缓存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认
mode模式支持如下的参数,常用的也就读写而已
在菜鸟教程里面罗列了常用的几个模式,并且使用图例的方式进行直白的解释
以及提供了下面这个表格,解释了常用的几个模式,可以实现哪些功能
同时你可以知道根据open方法返回的对象,获得如下信息
fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace
在打开一个文件,并使用结束后,一定要记住关闭它,不然你的内存会被大量占用
文件对象.close()
在调用了关闭流的方法后,Python会刷新缓存区里面的内容到文件中,之后就不能再操作写入了
Pythond的文件对象还提供了,许多其他方法用来操作文件,比如写方法
文件对象.write(str)
操作写入方法的时候,要注意,流中的 str 不一定必须是字符串,可以是二进制数据,且该方法不会自动增加换行符号
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
# 关闭打开的文件
fo.close()
在文件中会有如下内容:
www.runoob.com!
Very good site!
文件对象还提供了,读取内容的方法,read()
文件对象.read(num) 读取文件,num是字节个数,不写时读取所有内容
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
# 关闭打开的文件
fo.close()
读取的字符串是 : www.runoob
当然还有readline方法可以读取一行,在你要读取的文件很大的时候,就不在适合使用read了,且readline返回的字符串中包含换行符
file = open('foo.txt', 'r' )
while True:
text_line = file.readline()
if text_line:
print(text_line)
else:
break
readline函数还可以传入一个参数,和read的num一样意义的参数,控制读取的字节大小,不过一般不用,毕竟只读取一行数据
当然Python还有一个readlines函数,它的使用有些风险,因为它读取的也是整个文件,不过他的返回结果是一个列表,把每一行数据包含换行符作为列表的每一个元素
文件内容:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
fo = open("runoob.txt", "r")
print "文件名为: ", fo.name
for line in fo.readlines(): #依次读取每行
line = line.strip() #去掉每行头尾空白
print "读取的数据为: %s" % (line)
# 关闭文件
fo.close()
说了读取方法就不得不说,文件定位了,也就是光标读取文件时的位置
tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset [,from])方法改变当前文件的位置。offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
# 查找当前位置
position = fo.tell()
print "当前文件位置 : ", position
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print "重新读取字符串 : ", str
# 关闭打开的文件
fo.close()
结果:
读取的字符串是 : www.runoob
当前文件位置 : 10
重新读取字符串 : www.runoob
文件除了读写,最基本的还有重命名与删除
import os , shutil
os.rename(current_file_name, new_file_name) 重命名方法的两个参数,分别是带文件名的新旧路径
os.remove(file_name) 删除一个文件
shutil.move() 移动文件
当然 我们导入的 os 模块还有着相当多实用的方法
os.mkdir(newdir) 建立一个新的目录,注意该方法只能新建目录,想新建文件可以考虑open方法
os.chdir(newdir) 这个方法用来设置当前程序操作的当前路径,用的比较少
os.getcwd() 该方法用来显示当前路径,对于Python程序来说叫做当前工作目录
os.rmdir(dirname) 该方法用来删除一个目录,但是注意删除一个目录前,它的子数据应该是被删除的
os.listdir(目录) 获取目录下的所有文件名
shutil模块:是python内置的高级的文件、文件夹、压缩包处理模块
shutil.copyfile(src,dst)
将src复制到dst中去,dst一定要具有读写权限,如果dst已经存在会被覆盖,src和dst必须是文件,不可以是目录。
shutil.move(src,dst)
移动文件、目录。或者文件、目录重命名,如果dst存在,则不可覆盖。
shutil.copt(src,dst)
复制一个文件到一个文件或一个目录,src必须是文件,dst是文件或者目录
shutil.copy2(src,dst)
在copy的基础上再复制文件最后访问时间和修改时间也复制过来,但是创建时间是不会和源文件一样的。
shutil.copytree(olddir,newdir,True/False)
把olddir拷贝一份newdir,如果第三个参数是True,则复制目录时将保持文件夹下的符号链接,如果地3个参数时False,则将在复制的目录下生成物理副本来代替符号连接
文件对象和我们上面导入的 os 模块相互配合可以实现很多操作,用到时具体的大家可以在网上找找,推荐大家可以看看菜鸟教程的, 文件对象API --------- os 对象API