码迷,mamicode.com
首页 > 其他好文 > 详细

字符编码与文件处理

时间:2017-07-24 20:27:39      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:字符串   内存   aaa   打开文件   赋值   类型   适用于   单行   remove   

字符编码

1 以什么编码存的就要以什么编码取出
ps:内存固定使用unicode编码,
我们可以控制的编码是往硬盘存放或者基于网络传输选择编码

2 数据是最先产生于内存中,是unicode格式,要想传输需要转成bytes格式
#unicode----->encode(utf-8)------>bytes
拿到bytes,就可以往文件内存放或者基于网络传输
#bytes------>decode(gbk)------->unicode

3 python3中字符串被识别成unicode
python3中的字符串encode得到bytes

4 了解
python2中的字符串就bytes
python2中在字符串前加u,就是unicode

文件处理

文件处理流程

打开文件,得到文件句柄并赋值给一个变量------->通过句柄对文件进行操作------->关闭文件

读文件:

f=open(r‘aaaa.py‘,‘r‘,encoding=‘utf-8‘)
print(f.readline(),end=‘‘) #读取一行,
print(f.readlines()) #读取全部,不换行
print(f.readable()) #可读文件
print(f.writable()) #不可写文件
f.close() #结束之后必须关闭,否则占用内存
写文件:
f=open(‘new.txt‘,‘w‘,encoding=‘utf-8‘)
f.write(‘1111111111\n‘) #写入第一行
f.writelines([‘2222\n‘,‘3333\n‘,‘4444\n‘]) #添加多行
print(f.writable()) #可写
f.close()
追加:
f=open(‘new_2‘,‘a‘,encoding=‘utf-8‘)
print(f.readable()) #不可读
print(f.writable()) #可写
f.write(‘888888\n‘) #追加单行
f.write(‘999999\n‘)
f.writelines([‘787878\n‘,‘878787\n‘]) #追加多行
f.close()
#rb
f=open(‘aaaa.py‘,‘rb‘)    #以字节打开
print(f.read().decode(‘utf-8‘))
拷贝图片
f=open(‘1.jpg‘,‘rb‘)      #以rb的方式打开1.JPG
data=f.read() #data获取读取到f的内容
print(data)
f2=open(‘3.jpg‘,‘wb‘) #以写的方式打开
f2.write(data) #把data的内容写到f2
f2.close()
f.close()
#ab,以二进制的形式追加
f=open(‘new_3.txt‘,‘ab‘)
f.write(‘aaaaa\n‘.encode(‘utf-8‘))
上下文管理
with open(‘aaaa.py‘,‘r‘,encoding=‘utf-8‘) as read_f,\
open(‘aaaa_new.py‘,‘w‘,encoding=‘utf-8‘) as write_f:
data=read_f.read()
write_f.write(data)
循环取文件每一行内容
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as f:
while True:
line=f.readline()
if not line:break
print(line,end=‘‘)

lines=f.readlines() #只适用于小文件
print(lines)

data=f.read()
print(type(data))


for line in f: #推荐使用
print(line,end=‘‘)
文件的修改
方式一:只适用于小文件
import os
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,\
open(‘a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f:
data=read_f.read()
write_f.write(data.replace(‘alex_SB‘,‘alex_BSB‘))

os.remove(‘a.txt‘)
os.rename(‘a.txt.swap‘,‘a.txt‘)
#方式二:
import os
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,\
open(‘a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f:
for line in read_f:
write_f.write(line.replace(‘alex_BSB‘,‘BB_alex_SB‘))

os.remove(‘a.txt‘)
os.rename(‘a.txt.swap‘,‘a.txt‘)



打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码



 

字符编码与文件处理

标签:字符串   内存   aaa   打开文件   赋值   类型   适用于   单行   remove   

原文地址:http://www.cnblogs.com/52-qq/p/7230712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!