使用Python读写文本文件及编写简单的文本编辑器


Posted in Python onMarch 11, 2016

学习raw_input和argv是学习读取文件的前提,你可能不能完全理解这个练习,所以认真学习并检查。如果不认真的话,很容易删除一些有用的文件。

这个练习包含两个文件,一个是运行文件ex15.py,一个是ex15_sample.txt。第二个文件不是脚本文件,只包括一些文本,如下:

This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.

我们要做的就是打开这个文件,然后打印文件内容,我们不在代码中写死文件名称,因为我们如果要读取其他文件的话,就要重新修改代码,解决这个问题的办法就是使用argv和raw_input。

from sys import argv 
 
 
script, filename = argv 
 
 
txt = open(filename) 
 
 
print "Here's your file %r:" % filename 
print txt.read() 
 
 
print "Type the filename again:" 
file_again = raw_input("> ") 
 
 
txt_again = open(file_again) 
 
 
print txt_again.read()

上面的代码做了一些有意思的事情,让我们快速的分解一下:

1-3行使用argv取得文件名。第5行使用open命令,现在使用pydoc open看看这个命令的介绍。

第7行打印一行信息,但是第8行有一些新的东西。我们在txt上调用了一个方法。我们通过open方法得到一个file,这个file有一些我们可以调用的方法。使用这些方法的方法就是在file后面加一个.(点),比如txt.read(),就像是说:“嘿,执行读取命令,没有任何参数!”

剩下部分大家在加分练习中分析吧。

运行结果

root@he-desktop:~/mystuff# python ex15.py ex15_sample.txt
Here's your file 'ex15_sample.txt':

This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.

Type the filename again:
> ex15_sample.txt
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.

下面几个文件的命令比较常用:

  • close -- 关闭文件,相当于编辑器中的File->Save
  • read -- 读取文件内容分配给一个变量
  • readline -- 读取一行内容
  • truncate -- 清空文件,小心使用这个命令
  • write(stuff) -- 写入文件。

这些是你应该知道的重要命令,只有write需要提供参数。

让我们使用这些命令实现一个简单的文本编辑器。

from sys import argv 
 
 
script, filename = argv 
 
 
print "We're going to erase %r." % filename 
print "If you don't want that, hit CTRL-C (^C)." 
print "If you do want that, hot RETURN." 
 
 
raw_input("?") 
 
 
print "Opening the file..." 
target = open(filename, 'w') 
 
 
print "Truncating the file. Goodbye!!" 
target.truncate() 
 
 
print "Now I'm going to ask you for three lines." 
 
 
line1 = raw_input("line 1: ") 
line2 = raw_input("line 2: ") 
line3 = raw_input("line 3: ") 
 
 
print "I'm going to write these to the file." 
 
 
target.write(line1) 
target.write("\n") 
target.write(line2) 
target.write("\n") 
target.write(line3) 
target.write("\n") 
 
 
print "And finally, we close it." 
target.close()

这个程序比较长,所以慢慢来,让它能运行起来。有个办法是,先写几行,运行一下,可以运行再写几行,直到都可以运行。

运行结果
你会看到两个东西,一个是程序的输出:

root@he-desktop:~/mystuff# python ex16.py test.txt
We're going to erase 'test.txt'.
If you don't want that, hit CTRL-C (^C).
If you do want that, hot RETURN.
?
Opening the file...
Truncating the file. Goodbye!!
Now I'm going to ask you for three lines.
line 1: Hi!
line 2: Welcome to my blog!
line 3: Thank you!
I'm going to write these to the file.
And finally, we close it.

还有就是你新建立的文件,打开看看吧。

Python 相关文章推荐
Python解析xml中dom元素的方法
Mar 12 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Django中使用Celery的教程详解
Aug 24 Python
Python利用递归实现文件的复制方法
Oct 27 Python
Python魔法方法功能与用法简介
Apr 04 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
详解Python中namedtuple的使用
Apr 27 Python
python如何从键盘获取输入实例
Jun 18 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 #Python
详解Python中的变量及其命名和打印
Mar 11 #Python
Python基本语法经典教程
Mar 11 #Python
Python使用PIL库实现验证码图片的方法
Mar 11 #Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 #Python
Python实现列表转换成字典数据结构的方法
Mar 11 #Python
python中enumerate函数遍历元素用法分析
Mar 11 #Python
You might like
php入门学习知识点三 PHP上传
2011/07/14 PHP
php和html的区别点详细总结
2019/09/24 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
python生成器的使用方法
2013/11/21 Python
Python下singleton模式的实现方法
2014/07/16 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
详解python中list的使用
2019/03/15 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
Python3进制之间的转换代码实例
2019/08/24 Python
使用Python构造hive insert语句说明
2020/06/06 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
企业内部培训方案
2014/02/04 职场文书
我爱我家教学反思
2014/05/01 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis