fileinput 模块允许你循环一个或多个文本文件的内容

使用 fileinput 模块循环一个文本文件

import fileinput
import sysfor line in fileinput.input("samples/sample.txt"):sys.stdout.write("-> ")sys.stdout.write(line)-> We will perhaps eventually be writing only small
-> modules which are identified by name as they are
-> used to build larger ones, so that devices like
-> indentation, rather than delimiters, might become
-> feasible for expressing local structure in the
-> source language.
->      -- Donald E. Knuth, December 1974

  你也可以使用 fileinput 模块获得当前行的元信息 (meta information). 其中包括 isfirstline , filename , lineno

使用 fileinput 模块处理多个文本文件

import fileinput
import glob
import string, sysfor line in fileinput.input(glob.glob("samples/*.txt")):if fileinput.isfirstline(): # first in a file?sys.stderr.write("-- reading %s --\n" % fileinput.filename())sys.stdout.write(str(fileinput.lineno()) + " " + string.upper(line))-- reading samples\sample.txt --
1 WE WILL PERHAPS EVENTUALLY BE WRITING ONLY SMALL
2 MODULES WHICH ARE IDENTIFIED BY NAME AS THEY ARE
3 USED TO BUILD LARGER ONES, SO THAT DEVICES LIKE
4 INDENTATION, RATHER THAN DELIMITERS, MIGHT BECOME
5 FEASIBLE FOR EXPRESSING LOCAL STRUCTURE IN THE
6 SOURCE LANGUAGE.
7    -- DONALD E. KNUTH, DECEMBER 1974

  文本文件的替换操作很简单. 只需要把 inplace 关键字参数设置为 1 , 传递给 input 函数, 该模块会帮你做好一切.

使用 fileinput 模块将 CRLF 改为 LF

import fileinput, sysfor line in fileinput.input(inplace=1):# convert Windows/DOS text files to Unix filesif line[-2:] == "\r\n":line = line[:-2] + "\n"sys.stdout.write(line)

  shutil 实用模块包含了一些用于复制文件和文件夹的函数.

使用 shutil 复制文件

import shutil
import osfor file in os.listdir("."):if os.path.splitext(file)[1] == ".py":print fileshutil.copy(file, os.path.join("backup", file))aifc-example-1.py
anydbm-example-1.py
array-example-1.py
...

  copytree 函数用于复制整个目录树 (与 cp -r 相同), 而 rmtree 函数用于删除整个目录树 (与 rm -r )

使用 shutil 模块复制/删除目录树

import shutil
import osSOURCE = "samples"
BACKUP = "samples-bak"# create a backup directory
shutil.copytree(SOURCE, BACKUP)print os.listdir(BACKUP)# remove it
shutil.rmtree(BACKUP)print os.listdir(BACKUP)['sample.wav', 'sample.jpg', 'sample.au', 'sample.msg', 'sample.tgz',
...
Traceback (most recent call last):File "shutil-example-2.py", line 17, in ?print os.listdir(BACKUP)
os.error: No such file or directory

  tempfile 模块允许你快速地创建名称唯一的临时文件供使用.

使用 tempfile 模块创建临时文件

import tempfile
import ostempfile = tempfile.mktemp()print "tempfile", "=>", tempfilefile = open(tempfile, "w+b")
file.write("*" * 1000)
file.seek(0)
print len(file.read()), "bytes"
file.close()try:# must remove file when doneos.remove(tempfile)
except OSError:passtempfile => C:\TEMP\~160-1
1000 bytes

  TemporaryFile 函数会自动挑选合适的文件名, 并打开文件而且它会确保该文件在关闭的时候会被删除. (在 Unix 下, 你可以删除一个已打开的文件, 这 时文件关闭时它会被自动删除. 在其他平台上, 这通过一个特殊的封装类实现.)

使用 tempfile 模块打开临时文件

import tempfilefile = tempfile.TemporaryFile()for i in range(100):file.write("*" * 100)file.close() # removes the file!

   StringIO 模块的使用. 它实现了一个工作在内存的文件对象 (内存文件). 在大多需要标准文件对象的地方都可以使用它来替换.

使用 StringIO 模块从内存文件读入内容

import StringIOMESSAGE = "That man is depriving a village somewhere of a computer scientist."file = StringIO.StringIO(MESSAGE)print file.read()That man is depriving a village somewhere of a computer scientist.

  StringIO 类实现了内建文件对象的所有方法, 此外还有 getvalue 方法用来返回它内部的字符串值

使用 StringIO 模块向内存文件写入内容

import StringIOfile = StringIO.StringIO()
file.write("This man is no ordinary man. ")
file.write("This is Mr. F. G. Superman.")print file.getvalue()This man is no ordinary man. This is Mr. F. G. Superman.

  

使用 StringIO 模块捕获输出

import StringIO
import string, sysstdout = sys.stdoutsys.stdout = file = StringIO.StringIO()print """
According to Gbaya folktales, trickery and guile
are the best ways to defeat the python, king of
snakes, which was hatched from a dragon at the
world's start. -- National Geographic, May 1997
"""sys.stdout = stdoutprint string.upper(file.getvalue())ACCORDING TO GBAYA FOLKTALES, TRICKERY AND GUILE
ARE THE BEST WAYS TO DEFEAT THE PYTHON, KING OF
SNAKES, WHICH WAS HATCHED FROM A DRAGON AT THE
WORLD'S START. -- NATIONAL GEOGRAPHIC, MAY 1997

  cStringIO 是一个可选的模块, 是 StringIO 的更快速实现. 它的工作方式和 StringIO 基本相同, 但是它不可以被继承

使用 cStringIO 模块

import cStringIOMESSAGE = "That man is depriving a village somewhere of a computer scientist."file = cStringIO.StringIO(MESSAGE)print file.read()That man is depriving a village somewhere of a computer scientist.

  为了让你的代码尽可能快, 但同时保证兼容低版本的 Python ,你可以使用一个小技巧在 cStringIO 不可用时启用 StringIO 模块,

后退至 StringIO

try:import cStringIOStringIO = cStringIO
except ImportError:import StringIOprint StringIO<module  'StringIO' (built-in)>

  mmap 模块提供了操作系统内存映射函数的接口,  映射区域的行为和字符串对象类似, 但数据是直接从文件读取的.

使用 mmap 模块

import mmap
import osfilename = "samples/sample.txt"file = open(filename, "r+")
size = os.path.getsize(filename)data = mmap.mmap(file.fileno(), size)# basics
print data
print len(data), size# use slicing to read from the file
# 使用切片操作读取文件
print repr(data[:10]), repr(data[:10])# or use the standard file interface
# 或使用标准的文件接口
print repr(data.read(10)), repr(data.read(10))<mmap object at 008A2A10>
302 302
'We will pe' 'We will pe'
'We will pe' 'rhaps even'

  在 Windows 下, 这个文件必须以既可读又可写的模式打开( `r+` , `w+` , 或 `a+` ), 否则 mmap 调用会失败.

对映射区域使用字符串方法和正则表达式

mport mmap
import os, string, redef mapfile(filename):file = open(filename, "r+")size = os.path.getsize(filename)return mmap.mmap(file.fileno(), size)data = mapfile("samples/sample.txt")# search
index = data.find("small")
print index, repr(data[index-5:index+15])# regular expressions work too!
m = re.search("small", data)
print m.start(), m.group()43 'only small\015\012modules '
43 small

  

  

转载于:https://www.cnblogs.com/rollenholt/archive/2011/11/27/2264946.html

python标准库学习9相关推荐

  1. python标准库学习笔记

    原创:python标准库学习笔记 数据结构 bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法. struct - 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进 ...

  2. Python标准库学习——sys模块

    sys模块可以控制Python Shell窗口信息. 1.version 和 version_info 属性,可以列出目前所使用Python的版本信息. 列出目前所使用Python的版本信息. imp ...

  3. 【Python 标准库学习】容器数据类型库 — collections

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ collections 模块实现了特定目标的容器,以提供Python标准内建容器 ...

  4. 【Python 标准库学习】时间相关的函数库 — time

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ time 模块提供了各种时间相关的函数,该模块中的大多数函数是调用了所在平台 C ...

  5. 【Python 标准库学习】安全哈希与摘要算法库 — hashlib

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ hashlib 模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口.提供了常 ...

  6. 【Python 标准库学习】数据科学计算库 — math

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ math 模块官方文档:https://docs.python.org/3/lib ...

  7. python threading_【python标准库学习】thread,threading(一)多线程的介绍和使用

    在单个程序中我们经常用多线程来处理不同的工作,尤其是有的工作需要等,那么我们会新建一个线程去等然后执行某些操作,当做完事后线程退出被回收.当一个程序运行时,就会有一个进程被系统所创建,同时也会有一个线 ...

  8. 【Python 标准库学习】系统相关的参数和函数库 — sys

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ sys 模块提供了与 Python 解释器紧密相关的一些变量和函数,这些变量可能被 ...

  9. 【Python 标准库学习】多种操作系统接口和常用路径操作库 — os 与 os.path

    欢迎加入 Python 官方文档翻译团队:https://www.transifex.com/python-doc/ os 模块简介:主流操作系统有 Windows.UNIX.Mac OS 等,os ...

最新文章

  1. 【小白的CFD之旅】16 流程
  2. 在Matlab中调用Mathematica的函数
  3. 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法
  4. 机器学习笔记(二)逻辑回归和正则化
  5. DataSet.Relations 属性
  6. 如何存储和恢复 HTML5 Canvas 状态
  7. python打印网页成pdf_vue中将网页打印成pdf
  8. IBM AIX 5.3 系统管理 -- 系统启动过程详解
  9. android学习笔记---39_采用Service实现电话监控器,刻录打电话者的声音后通过socket上传到服务端
  10. 解决Asp输出乱码问题
  11. 二次规划的对偶形式(CVX)
  12. Android腾讯微博开放平台入门(三)Oauth授权
  13. java中验证国际手机号码
  14. 台式计算机联网,【实现台式电脑无线上网的2种方法】
  15. 万字长文!让你懂透编译原理(二)——第二章 高级语言及其语法描述
  16. 从零开始的单片机学习(二)
  17. 三十岁仍一事无成,一个失败工程师的自白
  18. 一年大约有3.1536*107s。编写一个程序,要求 输入你的年龄,然后显示该年龄等于多少秒。
  19. 360安全浏览器android,360安全浏览器手机版
  20. 用计算机弹咱们结婚吧乐谱,儿歌计算器曲谱_计算器弹音乐 大家给点流行歌乐谱吧,谢谢大家...

热门文章

  1. linux mint 17.3 内核,LinuxMint 17.3 Cinnamon抢鲜评测
  2. java获取mysql数据定时执行_详解SpringBoot 创建定时任务(配合数据库动态执行)...
  3. mysql 分区指定路径_[数据库]MySQL 指定各分区路径
  4. php阿里大于验证码开发,阿里大于验证码发送 (ThinkPhp框架)
  5. matlab中cell用法
  6. java 不知道类名_Java 中获取类名的三种方法,你知道几种?
  7. C++知识点43——解引用运算符和箭头运算符的重载及智能指针类的实现
  8. sega+model+3+android,世嘉MODEL2经典老游戏移植登场 追加联网对战
  9. netty中的future和promise源码分析(二)
  10. Codeforces Round #335 (Div. 2)