学习笔记——open使用和open报错解决方法

1,open

(1),open()和with open() as的区别

file = open("test.txt","r")
for line in file.readlines():
    print line
file.close()

 这样直接打开文件,如果出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭

with open("test.txt","r") as file:
for line in file.readlines():
    print line

用with语句的好处,就是到达语句末尾时,会自动关闭文件,即便出现异常。

with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:__enter__和__exit__。

方法__enter__不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。

方法__exit__接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果__exit__返回False,将抑制所有的异常。

文件也可用作上下文管理器。它们的方法__enter__返回文件对象本身,而方法__exit__关闭文件

file= open("test.txt","r")
try:
    for line in file.readlines():
        print line
except:
    print "error"
finally:
    file.close()

with语句作用效果相当于上面的try-except-finally 

(2)open函数打开文件方式

r:    以只读方式打开文件。文件的指针将会放在文件的开头。这是**默认模式**。
rb: 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+: 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+:以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w:    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb:    以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+:    打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+:以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a:    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab:    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+:    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+:以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

2,报错UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 75: illegal multibyte sequ

(1)看看是不是utf-8格式错误

UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 75: illegal multibyte sequ

找了很多资料也没发现有用的,问了一些朋友也不知道,然后自己试着改了下pycharm的一些东西,就好了

具体步骤:File --> Settings --> Editor --> Files Encodings --> 再把 Global ncoding和Project Encoding的编码都改成utf-8,因为一般浏览器都是用的utf-8格式,这样再运行程序就解决了


(2)手残设置了下这个Create UTF-8 Files with BOM

 在这里插入图片描述

结果就各种报错,编译都通不过

在这里插入图片描述

2.2.1UTF-8-BOM 科普小知识 

UTF-8 BOM又叫UTF-8 签名。BOM, byte order mark。
UTF-8的BOM,是为了支持UTF-16,UTF-32,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别。但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

参考博文: 错误:非法字符:“\ufeff”
参考博文:UTF-8 with BOM是什么意思

(3)

UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 3738: illegal multibyte sequence

报错问题的时候,这个时候一般在写入文件or读取文件位置加上“encoding”设置

3,open的使用

###  python文件的操作  ###
 
## 在D盘下 新建一个文件,并关闭
#使用w模式打开文件 如果文件存在 直接打开;如果文件不存在 会创建一个文件 然后打开
f1 = open('D:/test1.txt','w')  #python中文件的路径是用'/'
f1.close()
 
#方法二:
# Windows系统文件的路径用'\' ;但在python中,反斜杠’\’为转义字符
# 如果想采用Windows系统文件的路径,可以在含有转义符的字符串前加‘r’ 表示字符串内按原始含义解释,不做转义处理。
f2 = open(r'D:\test2.txt','w')
f2.close()
 
## 写数据(write)
# 以只写模式打开文件
f = open(r'D:\test2.txt','w')
# 写数据
f.write("hello,world")
# 关闭文件
f.close()
 
## 读数据(read)
# 以只读模式打开文件
f = open(r'D:\test2.txt','r')
# 读取数据
ret = f.read()
# 打印数据
print(ret)
# 关闭文件
f.close()
#<<< hello,world
 
 
## a 追加数据
f = open(r'D:\test2.txt','a')
f.write("在文件原有的数据上,追加数据")
f.close()
f = open(r'D:\test2.txt','r')
ret = f.readlines()
print(ret)
f.close()
#<<< ['hello,world在文件原有的数据上,追加数据']
 
对文件的常见三种操作:
r  :以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w :打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a  :打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值