python 文件输出与重定向 ,输出的内容会在内存中暂存,不会立刻输出到文件中

原创 2015年11月19日 15:13:08

1、使用write写磁盘文件

python 中使用write,将数据写入到文件中,但是并不是write之后,就立刻写入到文件(比如a.txt)中,python的write会先将数据放在内存的缓冲区中,等到积累了一定的量,再一起写入到磁盘文件中。这样可以提高性能,减少访问磁盘的次数。总结一下,在程序中使用write写文件,数据不会立刻写入到文件中,也就是打开文件看不到刚才写入的数据,但是,使用flush(),可以将内存中的数据写入到磁盘文件中。

f = open('f.txt','w')
f.write('1,2,3')
while(1):
    pass
解析:如上的程序,你打开f.txt文件是看不到‘1,2,3'的,因为'1,2,3'还在内存的缓冲区中,并未写入到磁盘文件中。


f = open('f.txt','w')
f.write('1,2,3')
f.flush()
while(1):
    pass

解析:使用flush()可以将缓冲区中的数据立刻写入到磁盘文件中,打开文件可以看到"1,2,3"

f = open('f.txt','w')
f.write('1,2,3')
f.close()
while(1):
    pass
解析:当关闭文件时,内存缓冲区的数据也会写入到磁盘文件中。


总结1:

使用write写文件,数据先存放在内存的缓冲区,关闭文件,或使用flush(),或内存缓存区的数据积累到一定的量,就会将内存缓冲区的数据写入到文件中。


2、输出重定向

import sys
temp = sys.stdout
file = open('f.txt','w')
sys.stdout = file
print (1,2,3)
sys.stdout.close()
sys.stdout = temp
print (1,2,3)
解析:

1、temp = sys.stdout:标准输出管道

2、sys.stdout = file:将标准输出管道连到打开的文件

3、sys.stdout.close():关闭管道,所以,使用print 输出的数据,本来是存放在管道中,close()之后,全部写入文件中。

4、sys.stdout = temp:重新连接到标准的输出

上述程序执行后,输出“1,2,3”,f.txt中会写入"1,2,3"

管道存在于内存中,在管道创建时,为缓冲区分配一个页面大小。

重定向也存在跟write一样的问题,write写入的数据是先存在内存缓冲区中,使用flush或关闭文件,才写入到磁盘文件中。同理,重定向,print 输出的文件也存放在管道(应该是内存的某块区域),等管道关闭,或整个程序结束后,才写入到重定向的文件中。

import sys
temp = sys.stdout
file = open('f.txt','w')
sys.stdout = file
print (1,2,3)
while(1):
    pass


解析:print(1,2,3)之后,数据还在管道中,并未写入到内存中。所以在f.txt中看不到数据。

import sys
temp = sys.stdout
file = open('f.txt','w')
sys.stdout = file
print (1,2,3)
sys.stdout.close()
while(1):
    pass
解析:print(1,2,3)之后,使用sys,stdout.close()关闭管道,所以管道内的数据会写入到磁盘文件中。


一个疑问:

在一个程序中,既使用重定向,又使用write,那么就存在,从管道写入到磁盘文件,和内存缓冲区写入到磁盘文件两种情况,两种情况不好协调,所以,如果是这种情况,最好使用flush(),将数据立刻写入到磁盘文件中,不然,我们都不确定,是管道数据先写入磁盘文件,还是内存缓冲区的数据先写入到磁盘文件

import sys
temp = sys.stdout
file = open('f.txt','w')
sys.stdout = file
print (1,2,3)
sys.stdout.flush()
file.write("aaa")
file.flush()



 


相关文章推荐

Python print 输出到文件

python3.x #!/usr/bin/env python3 #coding:utf-8 year = 1 years = 5 bj = 10000 rate = 0.05 f = open("...
  • yageeart
  • yageeart
  • 2014年08月05日 15:29
  • 43862

Python基础-输出到文件

打开文件: fw=open('data.txt','w') #'w'参数必须得写,不写的话,默认的是只读方式(即‘r’) 输出到文件: 方式1: fw.write(str)  这种方...

python中三种处理文件输出的方式

#读取一个文件中的数据,将其分成两部分内容,并保存在两个文件import osos.getcwd()os.chdir('E:\HeadFirstPython\chapter4')#切换到原文件存放路径...

Python学习笔记9:Python文件和输入输出

1、文件对象 普通的磁盘文件。 其他类型抽象层面上的“文件”。 具有文件类型接口的其他对象(类文件(file like)对象)。 内建函数open()返回一个文件对象。 还有大量的函数也会返回...
  • tiana0
  • tiana0
  • 2016年07月10日 17:30
  • 1640

python 学习笔记 5 -- 文件输入输出

本文主要介绍python下的文件输入输出操作,python的文件操作简单易用~痛过本文相信你可以熟练掌握file和pickle这两种输入输出操作! 1.文件 你可以通过创建一个file类的对象来打...

Python日志输出——logging模块

1. logging介绍         Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,H...

Python文件输入输出

http://blog.csdn.net/pipisorry/article/details/37769669 python文件输入输出教程 python文件读取 内置函数open() 得到一个文件...

Python输出字符串到txt文件中

最近在做的一个东西,需要将实验结果输出到txt文件中,因此,需要找一下如何使用Python将字符串输出到一个txt文件中,下面的找到的一种方法。     可以使用open函数打开一个文件,通过设置打...

Python重定向标准输入、标准输出和标准错误

UNIX用户已经对标准输入、标准输出和标准错误的概念熟悉了。这一节是为其它不熟悉的人准备的。 标准输出和标准错误(通常缩写为 stdout 和 stderr)是建立在每个UNIX系统内的管道(pipe...

python print 重定向+追加到文件

mark下 import sys f=open('test.txt','a+') s= '123' abc= '456' print >> f, s,abc f.close()   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 文件输出与重定向 ,输出的内容会在内存中暂存,不会立刻输出到文件中
举报原因:
原因补充:

(最多只允许输入30个字)