第一天    文件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. 第11章 AOF持久化

    AOF持久化在硬盘上保存的是对Redis进行的逻辑操作,类似InnoDB中的bin log.说白了就是你对一个Redis输入了哪些语句,AOF文件都会原封不动的保存起来,等到需要回复Redis的时候再 ...

  2. Linux:Day3 文件系统

    Linux的文件系统: 根文件系统(rootfs):root filesystem /boot:引导文件存放目录:内核文件(vmlinuz).引导加载器(bootloader,grub)都存放于此目录 ...

  3. vue-electron脚手架

    vue-electron官方文档(中文):https://simulatedgreg.gitbooks.io/electron-vue/content/cnvue-electron官方文档(英文):h ...

  4. fastjson 返回json字符串,JSON.parse 报错

    这是由于转义字符引起的如 : \ , fastjson 处理后是双反斜杠:\\ ,而 JSON.parse 解析时需要4个反斜杠 ,即 js解析json 反斜杠时,需要 4个 解成 1 个 解决方法: ...

  5. Linux内核入门到放弃-进程管理和调度-《深入Linux内核架构》笔记

    进程优先级 硬实时进程 软实时进程 普通进程 O(1)调度.完全公平调度器 抢占式多任务处理(preemptive multitasking):各个进程都分配到一定的时间段可以执行.时间段到期后,内核 ...

  6. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  7. 自定义实现moveable button

    实现的效果图: 自定义MVButton,继承自UIButton. 属性声明如下: @property (nonatomic) CGPoint beginPoint; @property (nonato ...

  8. webpack打包经验——处理打包文件体积过大的问题

    前言 最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题. 这里就写一下对于webpack打包优化的一些经验. 主要分为以下几个方面: 去掉开发环境下的配置 Ex ...

  9. MRO C3算法 super的运用

    -------------态度决定成败,无论情况好坏,都要抱着积极的态度,莫让沮丧取代热心.生命可以价值极高,也可以一无是处,随你怎么去选择.# --------------------------- ...

  10. 关于R语言中dnorm,pnorm,qnorm,rnorm的用法

    dnorm,pnorm,qnorm,rnorm的表达式: 其中x和q是由数值型变量构成的向量,p是由概率构成的向量,n是随机产生的个数 mean是要计算正态分布的均值,缺省值为0,sd是计算正态分布的 ...