Python文件操作

  • 1、使用open打开文件
  • 2、读文件
  • 3.写文件
  • 4、深入了解文件操作


1、使用open打开文件

使用open打开文件后一定要记得调用文件对象的close()方法。比如可以使用try/finally语句来确保关闭文件。

file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )

注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象无法执行close()方法。

2、读文件

  • 读文本文件
input = open('data', 'r')
#第二个参数默认为r
input = open('data')
  • 读二进制文件
nput = open('data', 'rb')
  • 读取所有内容
file_object = open('thefile.txt')
try:
     all_the_text = file_object.read( )
finally:
     file_object.close( )
  • 读固定字节
file_object = open('abinfile', 'rb')
try:
    while True:
         chunk = file_object.read(100)
        if not chunk:
            break
         do_something_with(chunk)
finally:
     file_object.close( )
  • 读每行
list_of_all_the_lines = file_object.readlines( )

如果文件是文本文件,还可以直接遍历文件对象获取每行:

for line in file_object:
     process line

3.写文件

  • 写文本文件
output = open('data', 'w')
  • 写二进制文件
output = open('data', 'wb')
  • 追加写文件
output = open('data', 'w+')
  • 写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
  • 写入多行
file_object.writelines(list_of_text_strings)

注意,调用writelines写入多行在性能上会比使用write一次性写入要高。

在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB
的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。 在 Python 中,内置的 File对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:

file = open('test.log', 'r') 
sizehint = 209715200   
# 200M position = 0 lines = file.read
lines(sizehint) 
while not file.tell() - position < 0:        
position = file.tell()        
lines = file.readlines(sizehint)

每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。

4、深入了解文件操作

一、用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行:

#python

>>>f=open('f.txt','w')    # r只读,w可写,a追加
>>>for i in range(0,10):f.write(str(i)+'\n')
.  .  .
>>> f.close()

二、文件内容追加,从0到9的10个随机整数:
#python

>>>import random
>>>f=open('f.txt','a')
>>>for i in range(0,10):f.write(str(random.randint(0,9)))
.  .  .
>>>f.write('\n')
>>>f.close()

三、文件内容追加,从0到9的随机整数, 10个数字一行,共10行:

#python
>>> import random
>>> f=open('f.txt','a')
>>> for i in range(0,10):
.  .  .     for i in range(0,10):f.write(str(random.randint(0,9))) 
.  .  .     f.write('\n')    
.  .  .
>>> f.close()

四、把标准输出定向到文件:

#python
>>> import sys
>>> sys.stdout = open("stdout.txt", "w")
>>>  . . .