跟老齐学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中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python基础中所出现的异常报错总结
Nov 19 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
python抓取多种类型的页面方法实例
Nov 20 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
Keras实现DenseNet结构操作
Jul 06 Python
Python数据库封装实现代码示例解析
Sep 05 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python如何写个俄罗斯方块
Nov 06 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
CI(CodeIgniter)框架配置
2014/06/10 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
前端性能优化建议
2020/09/17 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
50行Python代码实现人脸检测功能
2018/01/23 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
数据库面试要点基本概念
2013/10/31 面试题
Linux操作面试题
2012/05/16 面试题
初中地理教学反思
2014/01/11 职场文书
幼教简历自我评价
2014/01/28 职场文书
市场营销策划方案
2014/06/11 职场文书
物资采购方案
2014/06/12 职场文书
好人好事新闻稿
2015/07/17 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers