文件操作
f = open('lyrics.txt')
first_line = f.readline() #读取一行数据
for line in f.readlines(): #将所有行组成一个列表
print(line.strip())
for index,line in enumerate(f.readlines()): #很占内存,一般不用
if index % 9 == 0:
print('分割线'.center(50,'-'))
else:
print(line.strip())
count = 0
for line in f: #内存每次只保存一行,节省内存。
print(line) #不能读取下标,需要自定义计数器
count += 1
data = f.read() #读取剩余所有数据,文件大时不要使用
data2 = f.read() #此时文件指针已经在最后,因此data2读不到结果
f.close()
打开文件的模式有:
r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;会覆盖之前所有内容】
a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
f.open('lyrics2.txt','w')
f.write('歌词结尾\n')
r+,可读写文件。【可读;可写;可追加】
w+,写读
a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
文件光标
f.read(50) #阅读到50个字符
f.tell() #输出光标位置
f.seek(0) #光标回到0位置
f.name() #文件名
f.buffer() #显示缓存中的对象
f.write() #先写进缓存中,还未储存到硬盘中
f.flush() #刷新,表示立刻将缓存中的内容储存到硬盘,在文件中显示出来
f.truncate(20) #从头截断到20个字符位置
展示出打印机效果
import sys
import time
for i in range(20):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(0.1)
with语句
with open('log','r') as f:
... #with执行完后,内部会自动关闭并释放文件资源,防止打开文件后忘记
编码转换
import sys
print(sys.getdefaultencoding())
msg = "外北京"
msg_gb2312 = msg.encode('gb2312')
msg_gb2312_to_unicode = msg_gb2312.decode('gb2312')
msg_gb2312_to_utf8 = msg_gb2312.decode('gb2312').encode('utf-8')