open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Open file and return a stream. Raise IOError upon failure.
常用打开模式:
r 只能读
r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
w 只能写,覆盖整个文件,不存在则创建
a 只能写,从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建 ???实际上从头开始写
注:rb 是以二进制读取,用到socket的时候,传输文件,读取和写入用的都是二进制形式,rb和wb可以更快速的进行文件的传输
1 with open('test.txt', mode='r+', encoding='utf-8') as f: 2 f.read(1) 3 f.writelines("北京")
============
写操作不会自动加入换行符
读的一行末尾会有换行操作,可以用''.strip()去掉换行符
with open('test.txt', mode='r', encoding='utf-8') as f: for line in f: print(line.strip()) 去掉换行
================
如果指针已经指向后面,想要读取前面的内容,需要先把指针重新指向前面再读取。
with open('test.txt', mode='w+', encoding='utf-8') as f: f.writelines("天津") f.writelines('山东') f.flush() f.seek(0) print(f.readlines())
file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。
==============
示例:
f = open('cdays-4-test.txt', 'r') #以读方式打开文件
result = list()
for line in f.readlines(): #依次读取每行
line = line.strip() #去掉每行头尾空白
if not len(line) or line.startswith('#'): #判断是否是空行或注释行
continue #是的话,跳过不处理
result.append(line) #保存
result.sort() #排序结果
f.close() #关闭文件
with open('new_file.txt','w') as fw: #with方式不需要再进行close
fw.write('%s' % '\n'.join(result)) #保存入结果文件