文件对象:
with open('/etc/hosts') as f:
这样打开文件不用使用X.close()手动关闭文件,使用with打开文件,在文件使用结结束后会自动关闭。
r 以读方式打开(文件不存在则报错)
w 以写方式打开(文件存在则清空,不存在则创建)
a 以追加方式打开(必要时创建新文件)
r+ 以读写方式打开
w+ 以读写方式打开
a+ 以读写方式打开
open、file打开文件,一般用open
read读
readline读一行
readlines 读全部
文件写入:
file = open('/tmp/123.txt', 'w') #以写方式打开文件
file.write('123456') #写入字符串
6
file.write('\n') #写入回车,默认是没有回车的
1
file.close() #关闭文件
文件指针:
文件内移动:
seek(offset[,whence]) :移动文件指针到不同的位置
offset是相对于某个位置的偏移量
whence的值,0表示文件开头,1表示当前位置,2表示文件的结尾
tell():返回当前文件指针的位置
python2中支持从直接将文件指针移动到倒数第三个字符,
>>> f = open('/etc/hosts')
>>> f.tell() #查看当前文件指针的位置
0
>>> f.seek(-3, 2) #将文件指针移动到倒数第三个字符,-3代表偏移量,2代表文件末尾
>>> f.read()
'n6\n'
python3中文件打开方式必需以N + b的方式打开,才可以使用指针从后往前移动
>>> f = open('/opt/hosts', 'rb')
>>> f.tell()
0
>>> f.seek(-3,2)
155
>>> f.read()
b'n6\n'
适用与日志按时间节点截取的场景:
一点文件写入123数据到azj文件,
读取文件最后的文件指针位置到end当中,将文件内容读取到data中。
两点文件写入456数据到azj文件,
将文件指针移动到文件2点的位置并将文件指针位置赋值给b,
读取1点到2点之间的文件内容:
>>> data2 = f.read(b - end) #读取文件上次结束位置到第二次结束位置的内容
>>> data2
'456\n'
三点文件写入789数据到azj文件。
此时文件指针在文件2点时的位置,将剩余文件内容读取到data3中:
>>> data3 = f.read() #读取文件剩余的内容
>>> data3
'789\n'
>>> f = open('/tmp/azj.txt') #首先输入123到azj。文件中
>>> f.seek(0, 2) #把文件指针移动到行尾
4
>>> end = f.tell() #把文件指针位置赋值
>>> f.seek(0, 0) #文件指针返回开头位置
0
>>> data = f.read(end) #读取文件开头到刚才行尾文件指针的文件内容
>>> data
'123\n'
>>> f.seek(0, 2) #写入456到azj文件,将文件指针移动到文件末尾
8
>>> b = f.tell() #将文件指针位置赋值
>>> f.seek(end, 0) #将文件指针移动到上次结束位置
4
写入789到azj文件
>>> data2 = f.read(b - end) #读取文件上次结束位置到第二次结束位置的内容
>>> data2
'456\n'
>>> data3 = f.read() #读取文件剩余的内容
>>> data3
'789\n'
文件写入:
以r+的方式打开文件时,写入文件是以覆盖的形式写入。
标准文件:
程序一执行,就可以访问三个标准文件
标准输入:一般是键盘,使用sys.stdin
sys.stdin.<两次TAB键>
>>> sys.stdin.readline()
asdf
'asdf\n' #和input差不多,区别是会读取到回车的动作
标准输出:一般是显示器缓冲输出,使用sys.stdout
sys.stdout.<两次TAB键>
>>> sys.stdout.write('12344')
123445 #返回12344字符串并返回字符串的长度5
>>> sys.stdout.writelines('123')
123>>> #返回字符串本身,没有回车
标准错误:一般是显示器的非缓冲输出,使用sys.stderr
sys.stdeer.<两次TAB键>
>>> sys.stderr.writelines('123') #标准错误输出
123>>>
转载于:https://blog.51cto.com/13399699/2128420