第一天    文件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. 关于box-shadow和drop-shadow的显著区别

    一.box-shadow box-shadow是css3中新增的属性,用于增加边框阴影,让原有的元素变得更多样性,它名下有四位小弟,老大控制水平方向偏移,老二控制垂直方向偏移,老三控制模糊度,最小的老 ...

  2. 解决Nginx+Tomcat下客户端https请求跳转成http的问题

    Nginx上开启https,  后端使用Tomcat,  两者间走http协议, 但发现如果tomcat应用存在跳转时, 则客户端浏览器会出现400 Bad Request的错误, 通过抓包发现原因是 ...

  3. numpy.loadtxt()

    简介 np.loadtxt()用于从文本加载数据. 文本文件中的每一行必须含有相同的数据. loadtxt(fname, dtype=<class 'float'>, comments=' ...

  4. Java学习之路- SQL注入

    用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中   #代表的是单行注释 ...

  5. Windows 10 配置Linux及安装Docker

    https://baijiahao.baidu.com/s?id=1607159570058814753&wfr=spider&for=pc https://blog.csdn.net ...

  6. js、jquery实现放大镜效果

    在一些电商网站的商品详情页面,都会有放大镜效果,实现起来并不是很困难,今天用了两个小时,写了一个放大镜效果的实例,来分享给大家! 实现的效果大概是这个样子的 预览 先来看一下效果吧,点击下面的链接预览 ...

  7. docker创建nginx+php-fpm+mysql环境(一分钟搭建lnmp)

    下载镜像 docker pull bitnami/php-fpm #下载php-fpm镜像 docker pull nginx #下载nginx镜像docker pull mysql:5.5.59 # ...

  8. Python-os模块-60

    os 模块: 和操作系统打交道的模块 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirna ...

  9. NOIP2016解题报告

    天天听这几道题,但其实题面都没看过.今天做一下. 每道题看懂题后基本一分钟左右就切了.D2T3想的是\(O(n\log n)\)的堆做法,至少90分吧. D1T1模拟即可. D1T2每条路径拆成到根的 ...

  10. element ui主题色跟换

    node_modules\ element ui\ lib\ theme-dafault  下载的主题色替换掉改文件... ================== 但是会出现  搜索框iocon 样式换 ...