第一天    文件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

扩展:打印的颜色和背景色

数值表示的参数含义:
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色: 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用法的更多相关文章

  1. Python学习(15)文件/IO

    目录 Python 文件I/O 打印到屏幕 读取键盘输入 打开和关闭文件 File对象属性 文件定位 重命名和删除文件 Python的目录 Python 文件I/O 本章只讲述所有基本的的I/O函数, ...

  2. 老男孩 python学习自修第二十二天【文件上传与下载】

    1.使用socket实现文件上传 server.py #!/usr/bin/env python # _*_ coding:UTF-8 _*_ import os import SocketServe ...

  3. 老男孩python学习自修第十六天【常用模块之sys和os】

    例子: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys. ...

  4. 老男孩python学习自修第十九天【异常处理】

    1.常见的错误 TypeError 类型错误 NameError 没有该变量 ValueError 不期望的值 AttributeError 没有该属性 UnboundLocalError 没有该局部 ...

  5. 老男孩python学习自修第十一天【内置函数】

    1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...

  6. 老男孩python学习自修第六天【pycharm的使用】

    1.在工程右键可选新建文件夹,包盒python文件 文件夹和包的区别在于,包包含一个空的__init__.py文件,而文件夹没有 2.pycharm的断点调试 点击Debug表示进入调试状态 点击Re ...

  7. 老男孩python学习自修第二十一天【socket】

    1. 使用python编写一个静态的web服务器,能够处理静态页面的http请求 原理: a. 使用socket进行服务端和浏览器之间的通信 b. 使用多线程处理多个客户端浏览器的请求 c. 解析用户 ...

  8. 老男孩python学习自修第二十四天【多进程】

    1. 体验多进程的运行速度 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from multiprocessing import Pool import t ...

  9. 老男孩python学习自修第二十三天【多线程】

    1. 线程的创建与运行 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from threading import Thread def foo(param1 ...

随机推荐

  1. hive 压缩 差不多出来数据 各种压缩 数据格式

    待学习 DeprecatedLzoTextInputFormat

  2. filter 实现登录状态控制

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 网站需要做用户登录鉴权控制,没有登录的话,不能访问网站,提示需要登录. 实现方式: 使 ...

  3. 05 python 初学(列表)

    列表,有点像c++里的数组 # _author: lily # _date: 2018/12/16 mylist = ["xiaohong", "xiaogang&quo ...

  4. Bootstrap学习(一):Bootstrap简介

    一.Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更 ...

  5. linux进程管理总结

    目录 一.进程相关的概念 二.关闭会话时子进程进程被杀死 三.nohup的原理 四.setsid原理 五.daemon &和守护进程的区别 六.服务进程为什么要fork两次 七.systemd ...

  6. 百度智能手环方案开源(含源码,原理图,APP,通信协议等)

    分享一个百度智能手环开源项目的设计方案资料. 项目简介 百度云智能手环的开源方案是基于Apache2.0开源协议,开源内容包括硬件设计文档,原理图.ROM.通讯协议在内的全套方案,同时开放APP和云服 ...

  7. Java线程和线程池

    Android中创建线程的方式有,new Thread,new Thread(Runnable),new Thread(Callable)的形式. A. 直接new Thread简单方便. B. ne ...

  8. CAP理论与分布式事务解决方案

    微服务系统所设计的系统是分布式系统.分布式系统有一个著名的CAP理论,即同时满足"一致性""可用性"和"分区容错"是一件不可能的事.CAP理 ...

  9. Arduino通过L9110进行电机控制

    L9110S是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高. 该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干 ...

  10. H5 字体属性补充

    04-字体属性补充 abc我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...