跟老齐学Python之不要红头文件(1)


Posted in Python onSeptember 28, 2014

这两天身体不给力,拖欠了每天发讲座的约定,看官见谅。

红头文件,是某国特别色的东西,在python里不需要,python里要处理的是计算机中的文件,包括文本的、图片的、音频的、视频的等等,还有不少没见过的扩展名的,在linux中,不是所有的东西都被保存到文件中吗?文件,在python中,是一种对象,就如同已经学习过的字符串、数字等一样。

先要在交互模式下查看一下文件都有哪些属性:

>>> dir(file)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

然后对部分属性进行详细说明,就是看官学习了。

打开文件

在某个文件夹下面建立了一个文件,名曰:130.txt,并且在里面输入了如下内容:

learn python
http://qiwsir.github.io
qiwsir@gmail.com

此文件以供三行。

下图显示了这个文件的存储位置:

跟老齐学Python之不要红头文件(1)

在上面截图中,我在当前位置输入了python(我已经设置了环境变量,如果你没有,需要写全启动python命令路径),进入到交互模式。在这个交互模式下,这样操作:

>>> f = open("130.txt")   #打开已经存在的文件
>>> for line in f:
...   print line
... 
learn python

http://qiwsir.github.io

qiwsir@gmail.com

将打开的文件,赋值个变量f,这样也就是变量f跟对象文件130.txt用线连起来了(对象引用)。

接下来,用for来读取文件中的内容,就如同读取一个前面已经学过的序列对象一样,如list、str、tuple,把读到的文件中的每行,赋值给变量line。也可以理解为,for循环是一行一行地读取文件内容。每次扫描一行,遇到行结束符号\n表示本行结束,然后是下一行。

从打印的结果看出,每一样跟前面看到的文件内容中的每一行是一样的。只是行与行之间多了一空行,前面显示文章内容的时候,没有这个空行。或许这无关紧要,但是,还要深究一下,才能豁然。

在原文中,每行结束有本行结束符号\n,表示换行。在for语句汇总,print line表示每次打印完line的对象之后,就换行,也就是打印完line的对象之后会增加一个\n。这样看来,在每行末尾就有两个\n,即:\n\n,于是在打印中就出现了一个空行。

>>> f = open('130.txt')
>>> for line in f:
...   print line,   #后面加一个逗号,就去掉了原来默认增加的\n了,看看,少了空行。
... 
learn python
http://qiwsir.github.io
qiwsir@gmail.com

在进行上述操作的时候,有没有遇到这样的情况呢?

>>> f = open('130.txt')
>>> for line in f:
...   print line,
... 
learn python
http://qiwsir.github.io
qiwsir@gmail.com

>>> for line2 in f:   #在前面通过for循环读取了文件内容之后,再次读取,
...   print line2   #然后打印,结果就什么也显示,这是什么问题?
... 
>>>

如果看官没有遇到上面问题,可以试试。遇到了,这就解惑。不是什么错误,是因为前一次已经读取了文件内容,并且到了文件的末尾了。再重复操作,就是从末尾开始继续读了。当然显示不了什么东西,但是python并不认为这是错误,因为后面就会讲到,或许在这次读取之前,已经又向文件中追加内容了。那么,如果要再次读取怎么办?就从新来一边好了。

特别提醒看官,因为当前的交互模式是在该文件所在目录启动的,所以,就相当于这个实验室和文件130.txt是同一个目录,这时候我们打开文件130.txt,就认为是在本目录中打开,如果文件不是在本目录中,需要写清楚路径。

比如:在上一级目录中(~/Documents/ITArticles/BasicPython),加入我进入到那个目录中,运行交互模式,然后试图打开130.txt文件。

跟老齐学Python之不要红头文件(1)

>>> f = open("130.txt")
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '130.txt'

>>> f = open("./codes/130.txt")   #必须得写上路径了(注意,windows的路径是\隔开,需要转义。对转义符,看官看以前讲座)
>>> for line in f:
...   print line
... 
learn python

http://qiwsir.github.io

qiwsir@gmail.com

>>>

创建文件

上面的实验中,打开的是一个已经存在的文件。如何创建文件呢?

>>> nf = open("131.txt","w")
>>> nf.write("This is a file")

就这样创建了一个文件?并写入了文件内容呢?看看再说:

跟老齐学Python之不要红头文件(1)

真的就这样创建了新文件,并且里面有那句话呢。

看官注意了没有,这次我们同样是用open()这个函数,但是多了个"w",这是在告诉python用什么样的模式打开文件。也就是说,用open()打开文件,可以有不同的模式打开。看下表:

模式 描述r 以读方式打开文件,可读取文件信息。w 以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容a 以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建r+ 以读写方式打开文件,可对文件进行读和写操作。w+ 消除文件内容,然后以读写方式打开文件。a+ 以读写方式打开文件,并把文件指针移到文件尾。b 以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

从表中不难看出,不同模式下打开文件,可以进行相关的读写。那么,如果什么模式都不写,像前面那样呢?那样就是默认为r模式,只读的方式打开文件。

>>> f = open("130.txt")
>>> f
<open file '130.txt', mode 'r' at 0xb7530230>
>>> f = open("130.txt","r")
>>> f
<open file '130.txt', mode 'r' at 0xb750a700>

可以用这种方式查看当前打开的文件是采用什么模式的,上面显示,两种模式是一样的效果。下面逐个对各种模式进行解释

"w":以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容

131.txt这个文件是存在的,前面建立的,并且在里面写了一句话:This is a file

>>> fp = open("131.txt")
>>> for line in fp:     #原来这个文件里面的内容
...   print line
... 
This is a file
>>> fp = open("131.txt","w")  #这时候再看看这个文件,里面还有什么呢?是不是空了呢?
>>> fp.write("My name is qiwsir.\nMy website is qiwsir.github.io") #再查看内容
>>> fp.close()

查看文件内容:

$ cat 131.txt #cat是linux下显示文件内容的命令,这里就是要显示131.txt内容
My name is qiwsir.
My website is qiwsir.github.io

"a":以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建

>>> fp = open("131.txt","a")
>>> fp.write("\nAha,I like program\n")  #向文件中追加
>>> fp.close()              #这是关闭文件,一定要养成一个习惯,写完内容之后就关闭

查看文件内容:

$ cat 131.txt
My name is qiwsir.
My website is qiwsir.github.io
Aha,I like program

其它项目就不一一讲述了。看官可以自己实验。

本讲先到这里,明天继续文件。感冒药吃了,昏昏欲睡。

Python 相关文章推荐
Python修改MP3文件的方法
Jun 15 Python
详谈python read readline readlines的区别
Sep 22 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python定向爬取淘宝商品价格
Feb 27 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
python标准库ElementTree处理xml
May 20 Python
python自动化测试之连接几组测试包实例
Sep 28 #Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 #Python
跟老齐学Python之有容乃大的list(4)
Sep 28 #Python
跟老齐学Python之做一个小游戏
Sep 28 #Python
跟老齐学Python之坑爹的字符编码
Sep 28 #Python
python自动化测试之setUp与tearDown实例
Sep 28 #Python
python自动化测试实例解析
Sep 28 #Python
You might like
非常重要的php正则表达式详解
2016/01/04 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
python-str,list,set间的转换实例
2018/06/27 Python
10个Python小技巧你值得拥有
2018/09/29 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
优秀员工年终发言演讲稿
2014/01/01 职场文书
班长竞选演讲稿
2014/04/24 职场文书
大气污染防治方案
2014/05/19 职场文书
活动总结报告怎么写
2014/07/03 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
javascript canvas实现雨滴效果
2021/06/09 Javascript