老男孩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 ...
随机推荐
- 【转】dos下 和 批处理中的 for 语句的基本用法
for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是这样的: 在cmd 窗口中:for %I in (command1) do command2 在批处理文件中:for % ...
- 在新建的python3环境下运行jupyter失败的原因
在deeplearning中再运行jupyter notebook就出现了错误: (deeplearning) userdeMBP:~ user$ jupyter notebook -bash: ju ...
- linux7 安装rac 执行root脚本时候报错
运行root.sh脚本的时候报错 报错信息: [root@rac1 ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of / ...
- OpenCV3计算机视觉Python语言实现笔记(四)
1. Canny边缘检测 OpenCV提供了Canny函数来识别边缘.Canny边缘检测算法有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用非最大抑制(NMS).在检测到的边缘上使用双 ...
- D. Artsem and Saunders
一个变换题 给定f(x),[1,n]->[1,n] 构造g(x),h(x)满足: g(h(x))=x [1,n]->[1,m] h(g(x))=f(x) [1,m]->[1,n] 根 ...
- 一篇自己都看不懂的点分治&点分树学习笔记
淀粉质点分治可真是个好东西 Part A.点分治 众所周知,树上分治算法有$3$种:点分治.边分治.链分治(最后一个似乎就是树链剖分),它们名字的不同是由于分治方式的不同的.点分治,顾名思义,每一次选 ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...
- Appium-超过60s的应用场景如何处理
前言: 最近在搞appium自动化项目,遇到超过60s的应用场景时,总是报错报错.如何解决呢?见下文. 报错信息: 2018-05-21 14:03:42:253 - [HTTP] <-- PO ...
- Windows下如何更新 CodeBlocks 中的 MinGW 使其支持新版本 C++
转自:http://blog.csdn.net/wtfmonking/article/details/17487705 虽然 CodeBlocks16.01 已经是最新版了,但其中的 MinGW 仍然 ...
- Python-time模块-58
time 模块: Eva_J import time time.sleep(100) #时间睡眠 print(time.time()) #返回一个以秒为单位的时间 时间模块 和时间有关系的我们就要用到 ...