欢迎访问www.showerlee.com, 您的支持就是我前进的动力.

[PYTHON] 核心编程笔记之九-Python文件和输入输出

showerlee 2013-11-22 22:05 Programming, PYTHON 阅读 (6,805) 抢沙发

9.2 文件内建函数[open()和file()]

内建函数open()[以及file()]提供了初始化输入/输出(I/0)操作的通用接口,open()内建函数成功打开文件后会返回一个文件对象,否则引发一个错误,当操作失败,Python会产生一个IOError异常

file_object = open(file_name,access_mode='r',buffering=-1)

file_name是打开文件名字的字符串

access_mode代表文件打开的模式, r代表读取,w代表写入,a代表追加,U代表通用换行符支持

例:

fp = open("/etc/motd") #以读方式打开

fp = open('test','w') # 以写方式打开

fp = open('data','r+') #以读写方式打开

fp = open(r'c:\io.sys','rb') # 以二进制读模式打开

9.2.1 工厂函数file()

例如: dict(),bool(),file()等等

9.2.2 通用换行符支持(UNS)

9.3 文件内建方法

9.3.1 输入

read()方法用来直接读取字节到字符串中,最多读取给定数目个字节

readline()方法读取打开文件的一行,然后整行,包括字符结束行,作为字符串返回

readlines()方法会读取所有剩余行然后把他们作为一个字符串列表返回.

9.3.2 输出

write()内建方法功能与read()和readline()相反,它把含有文本数据或二进制数据块的字符串写入到文件中

9.3.3 文件内移动

seek()方法可以在文件中移动文件指针到不同位置,offset字节代表相对于某个位置偏移量,位置的默认值为0, 1代表从当前位置算起,2代表从文件末尾算起

text()方法是对seek()的补充:它告诉你当前文件指针在文件中的位置

9.3.4 文件迭代

for eachLine in f.readline():

9.3.5 其它

close()通过关闭文件来结束对它的访问

调用flush()方法会直接把内部缓冲区的数据立刻写入文件,而不是被动等待

isatty(),当文件是一个类tty设备时返回True,否则false

9.3.6 文件方法杂项:

filename = raw_input('Enter file name: ')

f = open(filename, 'r')

allLines = f.readlines()

f.close()

for eachLine in allLines:

   print eachLine,

使用文件迭代器,每次只读取和显示一行:

filename = raw_input('Enter file name: ')

f = open(filename, 'r')

for eachLIne in f:

   print eachLine,

f.close()

注:行分隔符和其他文件系统的差异

POSIX(Unix系列或Mac OS X)系统上,行分隔符是 换行符 NEWLINE(\n)字符

旧的MacOS下是RETURN(\r)

DOS和WIN32系统下结合使用 \r\n

有助于跨平台开发的os模块属性

os模块属性描述

linesep用来在文件中分隔行的字符串

sep用来分隔文件路径名的字符串

pathsep用来分隔文件路径的字符串

curdir当前工作目录的字符串名称

pardir父目录字符串名称

只要导入os模块,这些变量会设定成自动的值

---------------------------------------

#!/usr/bin/env python

import os

filename = raw_input('Enter file name: ')

fobj = open(filename,'w')

while True:

   aLine = raw_input("Enter a line ('.' to quit): ")

   if aLine != ".":

       fobj.write('%s%s' %(aLine, os.linesep))

   else:

       break

fobj.close()

----------------------------------------

以可读可写模式创建一个新文件,使用seek()方法在文件内部移动,使用tell()方法展示我们移动的过程

>>> f = open('/tmp/x','w+')

>>> f.tell()

0L

>>> f.write('test line 1\n') # 加入一个长度为12的字符串[0-11]

>>> f.tell()

12L

>>> f.write('test line 2\n') # 加入一个长度为12的字符串[12-23]

>>> f.tell()

24L

>>> f.seek(-12,1) # 向后移12个字节

>>> f.tell()# 到了第二个的开头

12L

>>> f.readline()

'test line 2\n'

>>> f.seek(0,0)  # 回到最开始

>>> f.readline()

'test line 1\n'

>>> f.tell()    # 又回到了第二行

12L

>>> f.readline()

'test line 2\n'

>>> f.tell()    # 又到了结尾

24L

>>> f.close()   # 关闭文件

文件对象的内建方法列表

文件对象的方法操作

file.close()关闭文件

file.fileno()返回文件的描述符

file.flush()刷新文件的内部缓冲区

file.isatty()贩毒案file是否是一个类tty设备

file.next()返回文件的下一行

file.read(size=-1)从文件读取size个字节,当未给定size或给定负值的时候,读取所有字节,作为字符串返回

file.readinto(buf,size)从文件读取size个字节到buf缓冲区(已不支持)

file.readline(size=-1)从文件中读取并返回一行(包括行结束符),或返回最大size个字符

file.readlines(sizeint=0)读取文件的所有行并作为一个列表返回(包含所有行的结束符)

file.xreadlines()用于迭代,可以替换readlines()的一个更高效方法

file.seek(off,whence=0)在文件中移动文件指针,从whence(0代表文件起始,1代表当前位置,2代表文件末尾)偏移off字节

file.tell()返回当前在文件中的位置

file.truncate(size=file.tell()) 截取文件到最大size字节,默认为当前文件位置

file.write(str)向文件写入字符串

file.writelines(seq)向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象

9.4 文件内建属性

文件对象的属性描述

file.closedTrue表示文件已经被关闭,否则为False

file.encoding文件所使用的编码

file.mode文件打开时使用的访问模式

file.name文件名

file.newlines未读取到行分隔符时为None

file.softspace为0表示在输出一数据后,要加上一个空格符,1表示不加

9.5 标准文件

只要你的程序一执行,那么你就可以访问三个标准文件,标准输入stdin,标准输出stdout,和标准错误stderr.

Python中可以通过sys模块来访问这些文件的句柄

print语句通常输出到sys.stdout

raw_input()通常从sys.stdin接受输入

sys.* 是文件,所以你必须自己处理好换行符

9.6 命令行参数

sys模块通过sys.argv属性提供对命令行参数的访问

总结如下:

sys.argv是命令行参数的列表

len(sys.argv)是命令行参数的个数(也就是argc)

例:

-------------------------

#!/usr/bin/env python

import sys

print 'you entered', len(sys.argv),'arguments..'

print 'they ware:', str(sys.argv)

-------------------------

# ./argv.py 76 tales 85 hawk

you entered 5 arguments..

they ware: ['./argv.py', '76', 'tales', '85', 'hawk']

9.7 文件系统

os模块的文件/目录访问函数

函数描述

文件处理

mkfifo()/mknod()创建命名管道/创建文件系统节点

remove()/unlink()Delete file 删除文件

rename()/renames()重命名文件

stat()返回文件信息

symlink()创建符号链接

utime()更新时间戳

tmpfile()创建并打开(w+b)一个新的临时文件

walk()生成一个目录树下的所有文件名

目录/文件夹

chdir()/fchdir()改变当前工作目录/通过一个文件描述符改变当前工作目录

chroot()改变当前进程的根目录

listdir()列出指定目录的文件

getcwd()/getcwdu()返回当前工作目录/功能相同,但返回一个Unicode对象

mkdir()/makedirs()创建目录/创建多层目录

rmdir()/removedirs()删除目录/删除多层目录

os.pardir返回当前目录的父目录

文件描述符操作

open()底层操作系统open(对于文件,使用标准的内建open()函数)

read()/write()根据文件描述符读取/写入数据

d