文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>《python 从入门到精通》 §11 文件

《python 从入门到精通》 §11 文件

时间:2009-08-26  来源:oychw

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CNeil%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style> </style>

§11  文件


<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CNeil%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style> </style>

2009-8-26

磁针石:xurongzhong#gmail.com

博客:oychw.cublog.cn

§11.1 打开文件             

       语法:open(name[, mode[, buffering]])            

f = open(r'C:\somefile.txt'),如果文件不存在则会报错。默认是只有只读权限的。

 

 

'r' Read mode

'w' Write mode

'a' Append mode

'b' Binary mode (added to other mode)

'+' Read/write mode (added to other mode)

 

python中的文件和unix中一样,行尾使用“\n",windows中使用”\r\n“。文本模式下python会进行自动转换。二进制需要保留原数据,不需要任何转换,所以有'b'参数。使用’U‘则是使用统一字符模式。

      

buffer如果为0,则不使用缓冲;如果为1则使用缓冲,直至使用flush或close才会存入磁盘。大数值表示缓冲大小,       –1 或者其他负数表示默认值。

             

§11.2 基本的文件方法

3种标准流:sys.stdin,sys.stdout,sys.stderr。它们都是文件或者类似文件的对象。

 

>>> f = open('c:\somefile.txt', 'w')

>>> f.write('Hello, ')

>>> f.write('World!')

>>> f.close()

 

写入的结果:Hello, World!

 

读取实例:

 

>>> f = open('c:\somefile.txt', 'r')

>>> f.read(4)

'Hell'

>>> f.read()

'o, World!'

 

实例11-1:统计单词数:

#!/usr/bin/env python

# somescript.py

import sys

text = sys.stdin.read()

words = text.split()

wordcount = len(words)

print 'Wordcount:', wordcount

 

该实例在windows下面难以运行。

 

随机访问:

       随机访问:使用seek和tell。

      

       语法:seek(offset[, whence])

       whence默认为0,表示从左到右,也可以为1,可前可后,为2则是从右到左。

      

       >>> f = open(r'c:\text\somefile.txt', 'w')

>>> f.write('01234567890123456789')

>>> f.seek(5)

>>> f.write('Hello, World!')

>>> f.close()

>>> f = open(r'c:\text\somefile.txt')

>>> f.read()

'01234Hello, World!89'

 

 

       ftell指明当前的位置:

      

 

>>> f = open(r'c:\text\somefile.txt')

>>> f.read(3)

'012'

>>> f.read(2)

'34'

>>> f.tell()

5L

 

读写行:

              someFile.readline()读取一行,返回'Hello, World!\n'。someFile.readline(5)返回'Hello'。readlines返回为列表。writelines则相反。因为有write,所以没有writeline方法。换行符是需要自己添加的。

             

关闭文件:

       # Open your file here

try:

# Write data to your file

finally:

file.close()

       也可以使用如下方法:

       with open("somefile.txt") as somefile:

do_something(somefile)

       with实际上是context manager,它支持__enter__、__exit__方法。__enter__没有参数,返回值为as后面的变量,__exit__有3个参数:an exception type, an exception object, and an exception traceback。

       基本的文件方法:

       f.read()读取所有

      

       >>> import pprint

>>> pprint.pprint(open(r'c:\text\somefile.txt').readlines())

['Welcome to this file\n',

'There is nothing here except\n',

'This stupid haiku']

 

 

 

§11.3 重复操作文件

f = open(filename)

char = f.read(1)

while char:

process(char)

char = f.read(1)

f.close()

 

另外一种方法:

f = open(filename)

while True:

char = f.read(1)

if not char: break

process(char)

f.close()

 

读取行:

f = open(filename)

while True:

line = f.readline()

if not line: break

process(line)

f.close()

 

列表的形式:

f = open(filename)

for char in f.read():

process(char)

f.close()

 

f = open(filename)

for line in f.readlines():

process(line)

f.close()

 

读取部分文件:

import fileinput

for line in fileinput.input(filename):

process(line)

 

老的版本使用xreadlines,现在被input代替了。

 

文件的迭代器:

 

f = open(filename)

for line in f:

process(line)

f.close()

 

由于python会自动关闭文件,甚至可以更简单:

for line in open(filename):

process(line)

 

import sys

for line in sys.stdin:

process(line)

 

>>> f = open('somefile.txt', 'w')

>>> f.write('First line\n')

>>> f.write('Second line\n')

>>> f.write('Third line\n')

>>> f.close()

>>> lines = list(open('somefile.txt)')

>>> lines

['First line\n', 'Second line\n', 'Third line\n']

>>> first, second, third = open('somefile.txt')

>>> first

'First line\n'

>>> second

'Second line\n'

>>> third

'Third line\n'

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载