【python】确保文件写入结束

今天遇到了个问题:

我在执行如下代码时发现,文件只写了一半。也就是说,当文件量过大时,下面的代码是不能保证文件被正确写入的。

fd = open(‘test.txt‘,‘w‘)
fd.write("a lot of thing")
fd.close()

解决办法:

来源:http://www.crifan.com/python_after_write_file_then_do_not_know_how_long_to_sleep_is_safe_close/

1.实际上,这个问题,是涉及到文件的缓存,操作系统的缓存方面的内容。

而对此,文件级别的缓存,已经有对应的函数:

file.flush()

Flush the internal buffer, like stdio‘s fflush(). This may be a no-op on some file-like objects.

Note

flush() does not necessarily write the file’s data to disk. Use flush()followed by os.fsync() to ensure this behavior.

去保证数据的写回了.

2.而且另外,上面也提到了,如果想要真正能够确保数据的确已经写回了,可以使用:

os.fsync(fd)

Force write of file with filedescriptor fd to disk. On Unix, this calls the native fsync() function; on Windows, the MS _commit() function.

If you’re starting with a Python file object f, first do f.flush(), and then doos.fsync(f.fileno()), to ensure that all internal buffers associated with f are written to disk.

Availability: Unix, and Windows starting in 2.2.3.

所以,相关的,正确的,完整的代码,就是:

import os;

fileObj=open(‘filename‘, ‘w‘);
#write data into fileObj here
#first do file flush()
fileObj.flush();
#then os fsync()
os.fsync(fileObj);
#then close is safe
fileObj.close();
时间: 2024-10-12 23:34:27

【python】确保文件写入结束的相关文章

python读取,写入和更新xml文件

VOC数据集的标注文件都是xml格式,最近需要频繁处理xml文件的读取和更新,整理下python处理xml文件的方法. XML 指可扩展标记语言(eXtensible Markup Language), 被设计用来传输和存储数据.python中有三个模块解析xml文件:DOM, ElementTree,SAX 1. DOM(Document Object Model) DOM是个跨平台的标准模型,W3C定义了DOM模型里的概念.DOM将XML数据在内存中解析成一个树,通过对树的操作来操作XML.

Python文件写入编码问题

今天,用Python写文件,发现中国人真不容易,任何编程问题都需要比老外多学一套应对编码的方法.JSP写完了吗?中文编码问题考虑一下:servlet中的url,转发的文本,都有可能与什么gb2312,isoxxxx,utf-8,unicode,ascii扯上关系.以至于,我们每每遇到运行异常,都会"一朝被蛇咬十年怕井绳"般思考"是不是又是编码导致的". 在python里,编码问题依然是个恶心的问题.之前在VS for Python的IDE环境下,已经饱尝中文编码之苦

Python统计字符出现次数(Counter包)以及txt文件写入

# -*- coding: utf-8 -*- #spyder (python 3.7) 1. 统计字符(可以在jieba分词之后使用) from collections import Counter from operator import itemgetter # txt_list可以写成函数参数进行导入 txt_list = ['千古','人间','人间','龙','龙','龙','哈哈哈','人才','千古','千古'] c = Counter() for x in txt_list:

python 文件写入

def write_file(): """ 文件写入""" file_name = "wri2te_test.txt" # 以写入的方式打开 f = open(file_name,'w') # 写入内容 f.write('hello') # 换行符 f.write('\n') # 写入内容 f.write('world') # 关闭文件 f.close() def write_mult_line(): ""

python之文件和素材

11.1 打开文件 open函数 open(name[,mode[,buffering]]) >>>f = open(r'C:\text\somefile.txt') 11.1.1 文件模式 open函数中模式参数的常用值 'r' 读模式 'w' 写模式 'a' 追加模式 'b' 二进制模式 '+' 读/写模式 通过在模式参数中使用U参数能够在打开文件时使用通用的换行符支持模式,在这种模式下,所有的换行符/字符串(\r\n,\r或者是\n)都被转换成\n,而不用考虑运行的平台. 11.1

Python读写文件

Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt')try:     all_the_text = file_object.read( )finally:     file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法.

python cookboo 文件与IO 函数

写出文本数据 g = open('test.txt', 'rt', newline='',encoding = 'utf-8', errors='replace') t是windows平台特有的所谓text mode(文本模式),区别在于会自动识别windows平台的换行符.类Unix平台的换行符是\n,而windows平台用的是\r\n两个ASCII字符来表示换行,python内部采用的是\n来表示换行符.rt模式下,python在读取文本时会自动把\r\n转换成\n.wt模式下,Python

python 的文件读写方法:read readline readlines wirte   writelines

read()方法读入整个文件,把整个文件以字符串形式返回. readline()  方法每次只读一行,每运行一次只读一行.如果要读整个文件,需要结合循环判断文件结束. python判断文件末尾的标志是,读到空字符. 比如: while str != '':     readline() 而readlines()每次读入整个文件,以列表的形式返回,把文件的每一行作为列表的一个元素. write(str)  提供的参数是字符串,把字符串写入文件. writelines(seq)  提供的参数是可迭代

Python读写文件实际操作的五大步骤

Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序. 一.打开文件 Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用程序.代码如下: f = open("d:\test.txt", "w") 说明: 第一个参数是文件名称,包括路