Python:file/file-like对象方法详解【单个文件读写】

IO中读写文件操作方法汇总!----The_Third_Wave的学习笔记!

本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。不定期更新,有错误请指正。

Sina微博关注:@The_Third_Wave 

如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。

class file(object)

 |  file(name[, mode[, buffering]]) -> file object

【更新于:2014.07.05

建议使用open打开文件,file做type测试。

When opening a file, it’s preferable to use open() instead of invoking this constructor directly. file is more suited to type testing (for example, writing isinstance(f, file)).

 |  Open a file.  The mode can be 'r', 'w' or 'a' for reading (default), writing or appending.  The file will be created if it doesn't exist when opened for writing or appending; it will be truncated when opened for writing.  Add a 'b' to the mode for binary files. Add a '+' to the mode to allow simultaneous reading and writing. If the buffering argument is given, 0 means unbuffered, 1 means line buffered, and larger numbers specify the buffer size.  The preferred way to open a file is with the builtin open() function. Add a 'U' to mode to open the file for input with universal newline support.  Any line ending in the input file will be seen as a '\n' in Python.  Also, a file so opened gains the attribute 'newlines'; the value for this attribute is one of None (no newline read yet), '\r', '\n', '\r\n' or a tuple containing all the newline types seen.

打开文件。默认为reading模式(r),mode参数可以为 'r'-reading , 'w'-writing or 'a' -appending(追加)。当为writing模式或者appending模式时如果文件不存在可能被创建。writing模式时文件可能被截断。'b'模式用于二进制文件。'+'模式用于允许同时读写文件。

buffering:0,无缓冲;1,一行缓冲,数字越大,意味着缓冲区越大。

打开文件推荐内置函数open()。'U'模式为通用换行符支持输入打开文件。在Python中任何行结束符在输入文件将被视为'\n'。同时,文件打开增加属性'newlines';此属性的值为None(没有新行可读时),'r','n','\r\n'或一个元组包含所有换行符的类型。

 |  'U' cannot be combined with 'w' or '+' mode.
 |  'U'不能和'w'或者'+'模式一起使用。

Methods defined here:

 |  close(...)

 |      close() -> None or (perhaps) an integer.  Close the file.
 |      关闭文件

 |      Sets data attribute .closed to True.  A closed file cannot be used for further I/O operations.  close() may be called more than once without error.  Some kinds of file objects (for example, opened by popen()) may return an exit status upon closing.

设置数据属性.closed()为真。关闭的文件不能用于进一步的I/O操作(关闭文件就没办法在操作了)!无错误时可以被调用1次以上。某些种类的文件对象可能在关闭时返回一个状态值(例如:popen()打开的文件对象)。【注:os.popen()】

 |  fileno(...)

 |      fileno() -> integer "file descriptor".
 |      返回值为整数(文件描述符)
 |      This is needed for lower-level file interfaces, such os.read().
 |      需要1个低级的文件接口,例如os.read()

 |  flush(...)

 |      flush() -> None.  Flush the internal I/O buffer 把缓冲区的内容写入磁盘!(write()之后需要用到)

 |  isatty(...)

 |      isatty() -> true or false.  True if the file is connected to a tty device.返回文件是否是一个终端设备文件【unix系统中使用】。

 |  next(...)

 |      x.next() -> the next value, or raise StopIteration【也就是生成器的方法,返回下一行。】
 |  

 |  read(...)

 |      read([size]) -> read at most size bytes, returned as a string.
 |      读取数据,返回字符串,可以指定大小。

 |      If the size argument is negative or omitted, read until EOF is reached. Notice that when in non-blocking mode, less data than what was requested may be returned, even if no size parameter was given.

如果size为负数或者缺省,读取整个文件。注意在非阻塞模式下,数据返回的可能比实际请求返回的少,及时size参数没有给定(也就是缺省状态)!

 |  readinto(...)

 |      readinto() -> Undocumented.  Don't use this; it may go away.
 |  

 |  readline(...)

 |      readline([size]) -> next line from the file, as a string.
 |      读取文件中的下一行,返回字符串

 |      Retain newline.  A non-negative size argument limits the maximum number of bytes to return (an incomplete line may be returned then). Return an empty string at EOF.

保持新行。非负的size参数限制返回的最大的字节数(也就是可能会返回不完整的行)。文件结束时返回空字符串!

 |  readlines(...)

 |      readlines([size]) -> list of strings, each a line from the file.
 |      返回每行数据的字符串列表
 |      Call readline() repeatedly and return a list of the lines so read. The optional size argument, if given, is an approximate bound on the total number of bytes in the lines returned.不断调用readline()方法并且返回一个每行数据(str)组成的list。【list(f)效果相同;size参数2.7.6实测使用没变化和read()读出来的相同,待进一步确定。】

 |  seek(...)

 |      seek(offset[, whence]) -> None.  Move to new file position.
 |      
 |      Argument offset is a byte count.  Optional argument whence defaults to 0 (offset from start of file, offset should be >= 0); other values are 1 (move relative to current position, positive or negative), and 2 (move relative to end of file, usually negative, although many platforms allow seeking beyond the end of a file).  If the file is opened in text mode, only offsets returned by tell() are legal.  Use of other offsets causes undefined behavior. Note that not all file objects are seekable.

 |  将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

 |  tell(...)

 |      tell() -> current file position, an integer (may be a long integer).
 |     返回文件当前位置,一个整数(可能是一个长整数)。【也就是一行一行读写文件时,现在光标所在位置(以文件开头为原点)】

 |  truncate(...)

 |      truncate([size]) -> None.  Truncate the file to at most size bytes.按size的值截取文件。
 |      
 |      Size defaults to the current file position, as returned by tell()。【说明太简单,待确定】
 |  

 |  write(...)

 |      write(str) -> None.  Write string str to file.
 |      写字符串到文件,返回值为None
 |      Note that due to buffering, flush() or close() may be needed before the file on disk reflects the data written.执行flush()或者close()之后才能真正写到文件。

 |  writelines(...)

 |      writelines(sequence_of_strings) -> None.  Write the strings to the file.
 |      
 |      Note that newlines are not added.  The sequence can be any iterable object producing strings. This is equivalent to calling write() for each string.请注意,没有添加新行。sequence_of_strings可为字符串构成的迭代器。这相当于调用write()写每个字符串。【不会自动换行,也就是说不会自动添加换行符;sequence_of_strings可以使list、tuple、dict(保持迭代器中内容为str)。】

 |  xreadlines(...)

 |      xreadlines() -> returns self.
 |      返回自身
 |      For backward compatibility. File objects now include the performance optimizations previously implemented in the xreadlines module.向后兼容。文件对象包括性能优化以前实施的xreadlines模块。
 |  

 |  ----------------------------------------------------------------------

文件读写

一、普通型

>>> f = open("C:\\Users\\admin\\Desktop\\222.txt",'r')
>>> print f.read()
@The Third Wave(Blog地址:http://blog.csdn.net/zhanh1218)文件读写!
>>> f.closed
False
>>> f.close()
>>> f.closed
True
>>> 
每次读完文件后,需要close()方法关闭文件对象。文件使用完毕后必须关闭,因为:文件对象会占用操作系统的资源;操作系统同一时间能打开的文件数量有限。

二、try--except--finally

>>> try:
	f = open("C:\\Users\\admin\\Desktop\\222.txt",'r')
	print f.read()
	print f.closed
except:
	print "error"
	raise
finally:
	if f:
	    f.close()
	print f.closed

	
@The Third Wave(Blog地址:http://blog.csdn.net/zhanh1218)文件读写!
False
True
>>> 
比较麻烦!

三、文艺型

使用with as语句,推荐!!!

>>> with open("C:\\Users\\admin\\Desktop\\222.txt",'r') as f:
	print f.read()
	print f.closed

	
@The Third Wave(Blog地址:http://blog.csdn.net/zhanh1218)文件读写!
False
>>> f.closed
True
>>> 

【更新于2014.07.08

如果编码指定正确却发现读取文件报编码错误,使用codecs模块以及切片操作[3:]去掉BOM可能有意想不到的收获!

本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。不定期更新,有错误请指正。

Sina微博关注:@The_Third_Wave 

如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。


阅读更多
换一批

没有更多推荐了,返回首页