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 信息同时输出到控制台与文件

python 信息同时输出到屏幕与文件 python编程中,往往需要将结果用print等输出,如果希望输出既可以显示到IDE的屏幕上,也能存到文件中(如txt)中,该怎么办呢?可通过log日志、输出两...
  • woaik110
  • woaik110
  • 2016年09月05日 22:32
  • 8967

python文件的写入

wirte()方法把字符串写入文件,writelines()方法可以把列表中存储的内容写入文件。 f=file("hello.txt","w+") li=["hello world\n","hello...
  • huaweitman
  • huaweitman
  • 2013年07月23日 14:42
  • 95628

python读写文件write和flush

打开文件用open,该函数创建一个文件对象,这将用来调用与之关联的其他支持方式。 file object = open(file_name [, access_mode][, bufferi...
  • fenfeiqinjian
  • fenfeiqinjian
  • 2015年10月27日 10:32
  • 7403

python 重定向输出到文件

import sys #start output = sys.stdout outputfile = open(filename,'w') sys.stdout = outputfile #end o...
  • ShellDawn
  • ShellDawn
  • 2017年05月04日 10:56
  • 805

python print 重定向+追加到文件

mark下 import sys f=open('test.txt','a+') s= '123' abc= '456' print >> f, s,abc f.close()   ...
  • zhangfn2011
  • zhangfn2011
  • 2012年10月10日 08:19
  • 20840

后台运行python程序 遇到缓冲区问题

From: http://www.iteye.com/topic/867446 环境:linux   一段执行时间很长的程序(用python做hive客户端执行mapreduce...
  • JoeBlackzqq
  • JoeBlackzqq
  • 2012年01月30日 16:12
  • 6761

解决python print延迟问题

最近写了几个python脚本,在用print输出的时候,都有一个很讨厌的问题,就是print的输出被延迟了,什么情况呢,类似这样 1 import os 2 print ‘first print ...
  • u012973744
  • u012973744
  • 2014年01月27日 23:28
  • 3438

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
  • 48672

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

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

Python3输出到html写文件需注意,出现前缀b'

要注意open方法
  • weizhixiang
  • weizhixiang
  • 2016年04月02日 12:14
  • 1219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 文件输出与重定向 ,输出的内容会在内存中暂存,不会立刻输出到文件中
举报原因:
原因补充:

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