第一天 文件IO处理
1.读文件实例
file_split.python
f = file('myFile.txt', 'r') for line in f.readlines(): line = line.strip('\n').split(':') print line
myFile.txt
## # User Database # # Note that this file is consulted directly only when the system is running # in single-user mode. At other times this information is provided by # Open Directory. # # See the opendirectoryd(8) man page for additional information about # Open Directory. ## nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false root:*:0:0:System Administrator:/var/root:/bin/sh daemon:*:1:1:System Services:/var/root:/usr/bin/false _uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
结果:
['##']
['# User Database']
['# ']
['# Note that this file is consulted directly only when the system is running']
['# in single-user mode. At other times this information is provided by']
['# Open Directory.']
['#']
['# See the opendirectoryd(8) man page for additional information about']
['# Open Directory.']
['##']
['nobody', '*', '-2', '-2', 'Unprivileged User', '/var/empty', '/usr/bin/false']
['root', '*', '0', '0', 'System Administrator', '/var/root', '/bin/sh']
['daemon', '*', '1', '1', 'System Services', '/var/root', '/usr/bin/false']
['_uucp', '*', '4', '4', 'Unix to Unix Copy Protocol', '/var/spool/uucp', '/usr/sbin/uucico']
2.文件读写模式
r 只读
w 只写
a 追加
r+b 读写,文件边写边覆盖,写完不回到开头
w+b 写读,先清空文件所有内容,再写,写完回到开头
a+b 追加及读,在文件末尾追加,写完回到文件开头
f = file('myFile.txt', 'r') import tab f.readlines() f.close() //这段命令为读取所有行,以只读模式打开则不能写入 f = file('myFile.txt', 'w') f.write('new line') f.close() //以只写模式打开文件,则无法读取文件,写的时候会覆盖 f = file('myFile.txt', 'a') f.write('second line') f.write('\nthird line') f.flush() //追加方式打开文件,从最后面写入 //文件内容的写入时机: 用户输入内容时,内容存放在缓冲区,当缓冲区的内容大于1M时自动写入文件 调用flush()或者close()方法时将内容从缓冲区写入文件
只读模式下写入文件时报错如下:
>>> f.write('new lines') Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: File not open for writing
3.文件的编码:
写入中文实例
#!/usr/bin/env python #_*_ coding:UTF-8 _*_ f = file('myFile.txt', 'w') f.write(u'你是小狗'.encode('UTF-8')) f.flush() f.close()//注意:写入中文需要制定编码为UTF-8;并且写入时需要指定编码
4.文件io的主要方法:
f.close() 关闭文件
f.closed() 文件是否被其他程序打开后关闭;为False则表示该文件正在被其他程序打开进行写操作
f.mode 文件的读写模式
f.read() 读取文件的所有内容以字符串的方式返回
f.readline() 读取文件的一行以字符串的方式返回
f.readlines() 读取文件的所有内容以列表的方式返回,一次性将文件所有行读取到内存
f.xreadlines() 逐行读,适用于大文件的读操作,使用迭代器实现,每读一行则处理一行
f.writelines() 将字符列表写入文件,列表的一个元素为一行
f.next() 迭代器,f.readlines()内部是使用该方法实现的
f.seek() 跳到文件的第几个字符串前面
f.tell() 告诉我光标在文件的第几个字符的位置
f.truncate() 从文件的第0ge字符开始截断多少个字符,其他的内容删除
5.实战:实现文件的内容全局替换
例如:输入命令 ./file_replace.py old_text new_text file_name则将file_name文件中的old_text改为new_text; 输入命令./file_replace.py old_text new_text file_name --bak则将old_text改为new_text且将原来的文件备份为file_name.bak
file_replace.py
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ import sys import os if len(sys.argv) >= 4: print "Useage file_replace.py old_text new_text file_name [--bak]" old_text, new_text, file_name = sys.argv[1], sys.argv[2], sys.argv[3] else: print "Parameter Error" old_file = file(file_name, 'rb') new_file = file('%s.bak.2' % file_name, 'wb') for line in old_file.xreadlines(): new_file.write(line.replace(old_text, new_text)) old_file.close() new_file.close() if '--bak' in sys.argv: os.rename(file_name, '%s.bak' % file_name) os.rename('%s.bak.2' % file_name, file_name) else: os.rename('%s.bak.2' % file_name, file_name)
6.作业:员工信息表
(1)用户可以模糊搜索查找用户信息
(2)匹配的信息需要高亮显示
(3)统计共找到了多少条信息
#!/usr/bin/env python #_*_ coding:UTF-8 _*_ input = raw_input("Please Search:") f = file("myFile.txt", "rb") search_count = 0 for line in f.xreadlines(): if input in line: search_count = search_count + 1 new_line = line.replace(input, "\033[1;31;40m %s \033[0m" % input) print new_line print "Found %d Record" % search_count
结果:
liudaoqangdeAir:day05 liudaoqiang$ python file_search.py Please Search:root root :*:0:0:System Administrator:/var/ root :/bin/sh daemon:*:1:1:System Services:/var/ root :/usr/bin/false _cvms root :*:212:212:CVMS Root:/var/empty:/usr/bin/false Found 3 Record
扩展:打印的颜色和背景色
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)
\033[0m 默认字体正常显示,不高亮
\033[32;0m 红色字体正常显示
\033[1;32;40m 显示方式: 高亮 字体前景色:绿色 背景色:黑色
\033[0;31;46m 显示方式: 正常 字体前景色:红色 背景色:青色
老男孩python学习自修【第一天】文件IO用法的更多相关文章
-
Python学习(15)文件/IO
目录 Python 文件I/O 打印到屏幕 读取键盘输入 打开和关闭文件 File对象属性 文件定位 重命名和删除文件 Python的目录 Python 文件I/O 本章只讲述所有基本的的I/O函数, ...
-
老男孩 python学习自修第二十二天【文件上传与下载】
1.使用socket实现文件上传 server.py #!/usr/bin/env python # _*_ coding:UTF-8 _*_ import os import SocketServe ...
-
老男孩python学习自修第十六天【常用模块之sys和os】
例子: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys. ...
-
老男孩python学习自修第十九天【异常处理】
1.常见的错误 TypeError 类型错误 NameError 没有该变量 ValueError 不期望的值 AttributeError 没有该属性 UnboundLocalError 没有该局部 ...
-
老男孩python学习自修第十一天【内置函数】
1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...
-
老男孩python学习自修第六天【pycharm的使用】
1.在工程右键可选新建文件夹,包盒python文件 文件夹和包的区别在于,包包含一个空的__init__.py文件,而文件夹没有 2.pycharm的断点调试 点击Debug表示进入调试状态 点击Re ...
-
老男孩python学习自修第二十一天【socket】
1. 使用python编写一个静态的web服务器,能够处理静态页面的http请求 原理: a. 使用socket进行服务端和浏览器之间的通信 b. 使用多线程处理多个客户端浏览器的请求 c. 解析用户 ...
-
老男孩python学习自修第二十四天【多进程】
1. 体验多进程的运行速度 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from multiprocessing import Pool import t ...
-
老男孩python学习自修第二十三天【多线程】
1. 线程的创建与运行 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from threading import Thread def foo(param1 ...
随机推荐
-
[异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
-
BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
-
python_模块
1. 模块的导入 (1) python中import module时,系统通常在哪些路径下面查找模块? 在以下的路径查找模块:sys.path 如果你模块所在的目录,不在sys.path的目录下,可以 ...
-
js及jQuery实现checkbox的全选、反选和全不选
html代码: <label><input type="checkbox" id="all"/>全选</label> < ...
-
【CSS】Intermediate2:Pseudo Classes
1.specify a state or relation to the selector selector:pseudo_class { property: value; } 2.Link 3.Dy ...
-
PHP5的对象复制
今天用yii开发程序,一个bug改了一晚上,最后发现问题出在了对象复制机制上,PHP5之前的对象复制只需要$object_a = $object_b即可,但PHP5这样得到的是浅复制,及指针指向,并不 ...
-
JAVA环境变量配置详解
JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH. JAVA_HOME 指向 ...
-
【阿里聚安全&#183;安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招
本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨 滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨 Android应用测试速查表 丨 黑客销售签名证书 -1- [人工智能]女主换 ...
-
JavaScript脚本的两种放置方式
JavaScript脚本的两种放置方式 1在body里用 script标签引用 2 直接写在<script></script>标签之中
-
InstallShield2015制作安装包----------安装后实现自动运行
安装向导完成后,自动运行. 实现的手段是:InstallScript脚本OnEnd()函数里面,调用可执行程序. 备注:INSTALLDIR预定义变量存放着程序的安装目录. //安装后运行dispat ...