标准IO设备的操作
print语句
print语句可以将内容输出到标准输出上,如print 'hello'
;除此之外,print
还可以将内容输出到文件对象里
1 2 3 | >>> import sys >>> print >> sys.stderr,'hello' #将内容输出到标准错误中 hello |
print
函数包含在__future__
模块中:
1 2 3 4 5 6 7 8 9 10 11 | >>> from __future__ import print_function #从__future__函数中导入print函数 >>> type(print) <type 'builtin_function_or_method'> #此时,print不再是一个语句,而是一个函数 >>> >>> print("hello","world") hello world >>> print("hello","world",sep='\n') #print函数具有比print语句更强大的功能,sep:分隔符 hello world >>> print("hello","world",sep='*') hello*world |
raw_input函数
一个内置函数,从标准输入读取内容
1 2 3 4 5 6 7 8 | >>> s = raw_input() hello >>> s 'hello' >>> s = raw_input("please input a word >> ") please input a word >> key >>> s 'key' |
open函数与file对象
open()是一个内置函数。open(name[,mode[,buffering]]),其实是对file的一个封装,返回一个file对象
具体参数
r
以读的方式打开,定位到文件开头,默认的mode
r+
以读写的方式打开,定位文件开头,可以写入内容到文件
w
以写的方式打开,打开文件的时候会清空文件的内容,并且不能读
w+
以读写的方式打开,定位到文件头,并且打开文件的时候也会清空文件的内容
a
以写的方式打开,定位到文件的末尾,是一个追加的操作,但并不允许读
a+
以读写的方式打开,定位到文件的末尾,追加的方式。
在使用以上mode打开文件的时候,如果增加了b 模式,表示以二进制方式打开
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | >>> f = open('/mnt/file','r') #以只读方式打开/mnt/file文件 >>> f.read() #文件为空,所以读出来的为空 '' >>> f.close() #打开的文件最终要关闭。每打开一个文件会消耗一个文件描述符, 如果打开太多会消耗掉所有的文件描述符就不能再打开文件了,关闭之后可以释放文件描述符,所以要记得关闭 >>> f = open('/mnt/file','w') >>> f.read() Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: File not open for reading #以只写方式打开则不能读 >>> f.write('hello') >>> f.close() >>> f = open('/mnt/file') #默认的为只读方式打开 >>> f.read() 'hello' >>> f.read() '' >>> f.close() |
file对象的一些操作
read()
read()
表示读取文件所有内容到内存里,可以带一个可选参数表示读取多少字节。当打开较大的文件时慎用
1 2 3 4 5 6 7 8 9 10 | >>> f = open('/mnt/file') #只读形式打开 >>> f.read() '12345678910\n12345678910\n12345678910\n' >>> f.read(4) #意图读四个字节,但文件指针已经到了文件末尾,读不出东西了 '' >>> f = open('/mnt/file') >>> f.read(4) #一次读取四个字节 '1234' >>> f.read(4) '5678' |
readline()
读取一行内容
1 2 3 4 5 6 7 8 9 | >>> f = open('/mnt/file') >>> f.readline() '12345678910\n' >>> f.readline() 'dshdiaufhies\n' >>> f.readline() 'hello\n' >>> f.readline() '' |
readlines()
将所有行内容读到一个列表里,会将换行符读取进来
1 2 3 4 | >>> f = open('/mnt/file') >>> f.readlines() ['12345678910\n', 'dshdiaufhies\n', 'hello\n'] >>> f.close() |
write()
将内容写入到文件
1 2 3 4 5 6 7 | >>> f = open('/mnt/file','w') >>> f.write('hello world hello tonglele') >>> f.close() >>> f = open('/mnt/file') >>> f.read() 'hello world hello tonglele' >>> f.close() |
writelines()
将一个序列写入到文件中,但不会加换行符
1 2 3 4 5 6 7 | >>> f = open('/mnt/file','w') >>> f.writelines(['hello world','hello tonglele']) >>> f.close() >>> f = open('/mnt/file') >>> f.read() 'hello worldhello tonglele' >>> f.close() |
truncate()
f.truncate()
清空文件,但是!!如果以a的方式打开,则不会清空,因为a的方式是定位到文件末尾,
该函数是从文件指针当前位置开始清空的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | root@tonglele /code/Python/IO/test # cat /mnt/file hello worldhello tonglele root@tonglele /code/Python/IO/test # python Python 2.7.5 (default, Feb 11 2014, 07:46:25) [GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> f = open('/mnt/file','a') >>> f.truncate() >>> f.close() >>> root@tonglele /code/Python/IO/test # cat /mnt/file hello worldhello tonglele root@tonglele /code/Python/IO/test # python Python 2.7.5 (default, Feb 11 2014, 07:46:25) [GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> f = open('/mnt/file','w') >>> f.truncate() >>> f.close() >>> root@tonglele /code/Python/IO/test # cat /mnt/file root@tonglele /code/Python/IO/test # |
flush()
flush()
函数,将缓冲区的内容写入到硬盘中,close()函数在关闭文件之前会执行此操作。
tell()
返回当前文件指针的偏移量
1 2 3 4 5 6 7 8 | >>> f = open('/mnt/file','r') >>> f.tell() 0 >>> f.read() 'dhsiadh\nhdsaih\nhsaifuf\nfsoh\nasi\n' >>> f.tell() 32 >>> f.close() |
seek()
seek
,seek(offset[,whence])
offset表示移动多少字节,whence为1的时候表示相对于当前位置移动的;
当2的时候从文件的末尾往后移动,但不一定所有的平台都支持;默认为0表示从文件开头往后移动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> f = open('/mnt/file','r') >>> f.tell() 0 >>> f.read() 'dhsiadh\nhdsaih\nhsaifuf\nfsoh\nasi\n' >>> f.read() '' >>> f.tell() 32 >>> f.seek(10) >>> f.tell() 10 >>> f.read() 'saih\nhsaifuf\nfsoh\nasi\n' |
close()
close()
函数,关闭当前打开的文件
fileno()
fileno()
函数,返回当前的文件描述符,一个数字
1 2 3 4 | >>> f = open('/mnt/file','r') >>> f.fileno() 4 >>> f.close() |
isatty()
isatty()
函数,当前打开的文件是否是一个终端设备
如果该文件被连接(与终端设备相关联)到一个tty(类似终端)设备,此方法返回True,否则False
1 2 3 4 | >>> f = open('/mnt/file','r') >>> f.isatty() False >>> f.close() |
closed
closed
属性,查看当前文件对象是否被关闭
1 2 3 4 5 6 | >>> f = open('/mnt/file','r') >>> f.closed False >>> f.close() >>> f.closed True |
next()
next()
方法,一行一行的读取,(file对象是一个迭代器,可以放在for循环里)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | >>> f = open('/mnt/file','r') >>> f.next() 'dhsiadh\n' >>> f.next() 'hdsaih\n' >>> f.next() 'hsaifuf\n' >>> f.next() 'fsoh\n' >>> f.next() 'asi\n' >>> f.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> f.close() >>> for line in open('/mnt/file'): ... print line ... dhsiadh hdsaih hsaifuf fsoh asi |
with语法
一般情况下打开一个文件,经过操作之后,都要显示的执行close()将其关闭
with
用于需要打开,关闭成对的操作,可以自动关闭打开的对象
1 2 3 4 | with expression as obj: expression 将打开的对象赋给obj obj的作用域只在with语句快中 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> with open('/mnt/file') as f: ... for line in f: ... print line ... dhsiadh hdsaih hsaifuf fsoh asi |
文本处理
字符串处理
split函数
split
函数,默认以空格分隔,可以传指定分隔符,传指定分隔片个数
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> str = 'tonglele tongyijia' >>> str.split() ['tonglele', 'tongyijia'] >>> str = 'hello!world' >>> str.split('!') #指定分隔符 ['hello', 'world'] >>> str = 'hihialoloapjpjommmolll' >>> str.split('o',1) #指定分隔符及分隔片个数 ['hihial', 'loapjpjommmolll'] >>> str.split('o',2) ['hihial', 'l', 'apjpjommmolll'] >>> str.split('o',3) ['hihial', 'l', 'apjpj', 'mmmolll'] |
join函数
join
函数,字符串的连接,用于连接一个迭代器,返回一个字符串
1 2 3 4 5 6 | >>> it = ['hel','lo'] >>> "".join(it) 'hello' >>> it = ['h','e','l','l','o'] >>> "-".join(it) 'h-e-l-l-o' |
+
也可以连接字符串,由于字符串是不可变的,所以在使用加号连接两个字符串的时候需要创建新的内存用来存储数据
字符串格式化
Python中字符串格式化主要有两种方式
占位符,%s
字符串,%d
整数,%f
浮点数
1 2 3 4 | >>> "hello %s" % "tonglele" 'hello tonglele' >>> "hello %s hello %d hello %f" % ("tonglele",18,7.7) 'hello tonglele hello 18 hello 7.700000' |
字符串查找 find()函数
find()
函数,返回字符串在原字符串中第一次出现的位置,若没找到则返回-1
1 2 3 4 5 6 7 8 9 10 11 | >>> str = "hello tonglele" >>> str.find('o') 4 >>> str.find('hell') 0 >>> str.find('lele') 10 >>> str.find('tongyijia') -1 >>> str.find('e',10,14) #还可以接受两个可选参数,start,end用于标示查找时的起始位置和结束位置 11 |
字符串替换
replace函数
replace
函数,用于替换
1 2 3 | >>> str = "hello tonglele" >>> str.replace("lele","yijia") 'hello tongyijia' |
strip函数
strip
函数,用来替换字符串首尾的空白(空格、制表符\r、\n、\t)
1 2 3 4 5 6 7 8 9 10 11 12 | >>> str = "hello tonglele " >>> str.strip() 'hello tonglele' >>> str = "hello tonglele " >>> str.strip() 'hello tonglele' >>> str = "hello tonglele " >>> str = "hello tonglele\n" >>> str 'hello tonglele\n' >>> str.strip() 'hello tonglele' |
rstrip
移除右边的空白,lstrip
移除左边的空白
感谢阅读,欢迎指正。