python下几种打开文件的方式
来源:互联网 发布:手机小号软件排行 编辑:程序博客网 时间:2024/06/08 00:22
昨天看完了这本python进阶,感觉这本书对我启发很大,做了三张纸的笔记,方便我在遇到问题的时候翻阅,然后寻找可能的解决方案。作为一个使用Python一年的小白,虽然说不是小白,但是这一年来基本上是用什么学什么,对python没有系统的学习过,900多页的厚书看了三分之一就放弃了,所以对python的一些pythonic的东西不太了解,对其很多自带的方法都不知道,很多很好的方法都从来没有使用过,现在回过头来看看,自己的python代码确实冗余度很高,一点都不pythonic。所以说,还是有必要看一遍python的书的,起码做到通读一遍,对平常的开发也是很有帮助的。
进入正题。
python下打开文件超级简单,不用导入任何包,直接输入
f = open('your_file.txt','r')
就可以打开一个文件进行操作。第二个参数为对文件的操作方式,’w’是写文件,已存在的同名文件会被清空,不存在则会创建一个;’r’是读取文件,不存在会报错;’a’是在文件尾部添加内容,不存在会创建文件,存在则直接在尾部进行添加;还有’wb’是写二进制文件;’rb’是读取二进制文件,比如图片之类的。
但是这种方式其实不是最好的打开文件的方式,这种方式可能会有这样几个问题:
1、未指定文件编码格式,如果文件编码格式与当前默认的编码格式不一致,那么文件内容的读写将出现错误。
2、如果读写文件有错误,会导致文件无法正确关闭。因为哪怕在后面有
f.close()
语句,但是如果在打开的时候就出现错误,这种打开方式会出现问题。因此,一般来说,不推荐这种打开文件的方式。(我之前其实一直使用这种方法,,虽然也知道其他的方法,但是嫌麻烦一直没怎么用…)
上面的这些问题都是针对python2的,在python3下open函数可以通过encoding参数指定编码方式,而在2中不可以。
在python3下可以直接通过这样来打开一个文件:
f = open('your_file.txt', 'r', encoding='utf-8')
下面的两种方式在python2和python3下都可以使用,因此如果想要让你的代码在2和3下都兼容的话可以尝试下面的两种方法:
import codecsf1 = codecs.open('your_file1.txt', 'r', 'utf-8') #使用codecs包f1.close()import iof2 = io.open('your_file2.txt', 'r', encoding='utf-8') #使用io包f2.close()
不知道有没有细心的同学发现上面的打开文件的方式都有瑕疵,下面的方法则是用来解决刚才提到的第二个问题的,也是最推荐的一种打开文件的方式。
import codecs #或者io,使用哪种包无所谓with codecs.open('your_file.txt', 'r', 'utf-8') as f: f.write('This method is prior')
使用with这种上下文环境的方式打开文件,在对文件操作完成后无需通过close()关闭文件,文件会自动关闭,而且安全系数更高。
个人更加喜欢使用wiht 上下文打开的这种方式,而且用起来比较放心,尤其是对于忘记关闭文件的人。
- python下几种打开文件的方式
- python下几种打开文件的方式
- python下几种打开文件的方式
- python文件打开方式
- python文件打开方式的区别
- .whl文件打开方式 Python
- 文件的打开方式
- python下几种打开文件的方式(你习惯的不一定是最好的)
- python文件操作之文件打开方式
- python文件的打开
- Python中type打开文件方式
- 各种文件的打开方式
- 文件对话框的打开方式
- C++打开文件的方式
- 远程打开文件的方式
- 打开bmp文件的方式
- Python打开文件的模式
- Python log 的正确打开方式
- Flask笔记
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛(9.9)
- 【LeetCode】349. Intersection of Two Arrays
- 重排整数
- VC科学计算器
- python下几种打开文件的方式
- Maven的安装
- 【个人笔记】突然看到的一个关于小数输出的东西,记录下来
- Web: 使用Javascript新开一个浏览器标签而不是新开一个窗口
- Java程序中Json不能解析的问题
- 深度学习基础教程——caffe环境的搭建
- 编程精华资源(ITeye优秀专栏)大汇总
- 100. Same Tree
- 第一周java作业