老男孩python学习自修【第一天】文件IO用法
第一天 文件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 ...
随机推荐
- Java时间api
- 【转】ffmpeg常用基本命令
[FFmpeg]FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpe ...
- ssm框架的整合搭建(三)
mybatis逆向工程工具类的使用---mybatis generator 项目结构 配置文件 <?xml version="1.0" encoding="UTF ...
- <计算机网络>运输层
端口号:通常在一台主机上运行多个网络应用程序,IP地址标识一台主机,而端口号标识特定的进程.端口是一个16bits的数,其大小在0-65535之间.0-1023之间的端口号叫做周知端口号 套接字:从网 ...
- spring-boot项目的新建(出生)
了解了SSM之后,发现是真的强大,但是配置有点多,是不是啊,老铁,所以Spring-boot被我给抓住,了解了一波.[/斜眼笑] 一.Spring-boot是啥呢? 以我现在的水平,无法用花里胡哨的语 ...
- Linux中断管理 (3)workqueue工作队列
目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...
- day96
在服务器上部署上线项目 Linux数据库处理 首先我们需要在mysql中创建bbs库,并导入数据库SQL脚本(就是原本运行在我们项目中的数据库) 前提:需要进入mysql中 mysql> cre ...
- 微信小程序项目实战 - 菜谱大全
1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...
- Linux:一位猫奴的意外逆袭
作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...
- 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData
1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既 ...