第一天    文件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. Python 的全局变量

    结论: Python 的全局变量只在本文件中生效. 定义全局变量的文件 G.py # define some global variable A = 1 B = 2 C = 3 def fuck(a= ...

  2. appium+python自动化56-微信小程序自动化(摩拜为例)

    前言 最近微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 本篇以摩拜小程序为例,介绍如何定位小程序里面的元素 运行环境: android 7.0 appium v1.7.1 web ...

  3. node.js如何引用其它js文件

    以Java来说,比如要实现第三方存储,我可能需要导入对应的库,以maven为例,使用腾讯云或者七牛云.阿里云,我需要导入对应的maven依赖.再比如,有些时候我们封装某个类,而那个类不在该包下,我们需 ...

  4. [MicroPython]STM32F407开发板DIY声光控开关

    1.实验目的 1. 学习在PC机系统中扩展简单I/O 接口的方法. 2. 进一步学习编制数据输出程序的设计方法. 3. 学习光敏模块的工作原理. 4. 学习声音的工作原理. 5. 学习F40 7Mic ...

  5. Scala--模式匹配和样例类

    模式匹配应用场景:switch语句,类型查询,析构,样例类 一.更好的switch val ch :Char = '+' val sign = ch match{ case '+' => 1 c ...

  6. UVA12253 简单加密法 Simple Encryption

    这题到现在还是只有我一个人过?太冷门了吧,毕竟你谷上很少有人会去做往年ACM比赛的题 题面意思很简单,每次给出\(K_1\),让你求一个\(K_2\)满足\(K_1^{K_2}\equiv K_2(\ ...

  7. 一看就懂的Mybatis框架入门笔记

    本篇为初学Mybatis框架时的入门笔记,整理发出 Spring集成Mybatis https://www.cnblogs.com/yueshutong/p/9381590.html SpringBo ...

  8. MFC 坦克定位

    最近学习MFC,写了个用键盘上下左右移动的坦克界面,效果图: 先用VC++新建一个最简单的MFC项目,基于Dialog的 1. 添加坦克图片资源:略 2. 添加3个变量:x, y, m_bitmap ...

  9. 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑

    我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的). 1.客户端的使用 我们在使用Redis.Elas ...

  10. 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件

    朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 [下载本文PDF进行阅读] Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的 ...