python标准库学习9

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

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

import fileinput

import sys

 

for 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, sys

 

for 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, sys

 

for line in fileinput.input(inplace=1):

    # convert Windows/DOS text files to Unix files

    if line[-2:] == "\r\n":

        line = line[:-2] + "\n"

    sys.stdout.write(line)

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

使用 shutil 复制文件

import shutil

import os

 

for file in os.listdir("."):

    if os.path.splitext(file)[1] == ".py":

        print file

        shutil.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 os

 

SOURCE = "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 os

 

tempfile = tempfile.mktemp()

 

print "tempfile", "=>", tempfile

 

file = open(tempfile, "w+b")

file.write("*" * 1000)

file.seek(0)

print len(file.read()), "bytes"

file.close()

 

try:

    # must remove file when done

    os.remove(tempfile)

except OSError:

    pass

 

tempfile => C:\TEMP\~160-1

1000 bytes

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

使用 tempfile 模块打开临时文件

import tempfile

 

file = tempfile.TemporaryFile()

 

for i in range(100):

    file.write("*" * 100)

 

file.close() # removes the file!

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

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

import StringIO

 

MESSAGE = "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 StringIO

 

file = 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, sys

 

stdout = sys.stdout

 

sys.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 = stdout

 

print 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 cStringIO

 

MESSAGE = "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 cStringIO

    StringIO = cStringIO

except ImportError:

    import StringIO

 

print StringIO

 

<module  'StringIO' (built-in)>

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

 使用 mmap 模块

import mmap

import os

 

filename = "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, re

 

def 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

时间: 2024-12-31 01:41:20

python标准库学习9的相关文章

python标准库学习6

使用 apply 函数 def function(a, b):     print a, b   apply(function, ("whither", "canada?")) apply(function, (1, 2 + 3)) whither canada? 1 5 使用 apply 函数传递关键字参数 def function(a, b):     print a, b   apply(function, ("crunchy", &quo

python标准库学习7

使用 os.path 模块处理文件名 import os   filename = "my/little/pony"   print "using", os.name, "..." print "split", "=>", os.path.split(filename) print "splitext", "=>", os.path.splitext(fi

python标准库学习8

使用sys重定向输出 import sys import string   class Redirect:       def _ _init_ _(self, stdout):         self.stdout = stdout       def write(self, s):         self.stdout.write(string.lower(s))   # redirect standard output (including the print statement) #

python标准库学习5 ---bisect — Array bisection algorithm

#coding=utf-8   import bisect   list=[1,2,3,4,6,7,8,9]   #假定list已经排序 print bisect.bisect_left(list,5)  #返回5应该插入的索引位置   print bisect.bisect_right(list, 5)   print bisect.bisect(list,5)   bisect.insort_left(list, 5, 0, len(list)) print list   bisect.in

python标准库学习4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

Python标准库的学习准备

原文:Python标准库的学习准备 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准库所涉及的应用很广,所以需要学习一定的背景知识.   硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念.这些内容基础而重要. Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了

Python标准库——走马观花

原文:Python标准库--走马观花 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python的一大好处在于它有一套很有用的标准库(standard library).标准库是随着Python一起安装在你的电脑中的,是Python的一部分 (当然也有特殊情况.有些场合会因为系统安全性的要求,不使用全部的标准库,比如说Google App Engine).   利用已有的类(class)和函数(function)进行开发

Python标准库07 信号 (signal包,部分os包)

原文:Python标准库07 信号 (signal包,部分os包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习和理解.signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂停并等待信号,以及定时发出SIGALRM等.要注意,signal包主要是针对UNIX平台(比如Linux, MAC OS),而Windo

Python标准库09 当前进程信息 (部分os包)

原文:Python标准库09 当前进程信息 (部分os包)  作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系.   进程信息 os包中相关函数如下: uname() 返回操作系统相关信息.类似于Linux上的uname命令. umask() 设置该进程创建文件时的权限m