当使用写入空数据的方式生成大文件时,时间消耗是很长的,可以通过seek和write配合的方式快速生成大文件。
def create_file(file_path, size):
"""
# 快速生成大文件
:param file_path: 文件路径
:param size: 文件大小,本函数以GB为单位,也可以根据需求设置为KB或MB等
:return:
"""
# 首先以路径path新建一个文件,并设置模式为写
lfile = open(file_path, 'w')
# 根据文件大小,偏移文件写入位置;位置要减掉一个字节,因为后面要写入一个字节的数据
lfile.seek(1024 * 1024 * 1024 * size - 1)
# 然后在当前位置写入任何内容,必须要写入,不然文件不会那么大哦
lfile.write('\x00') # lfile.write('')不会写入任何内容
lfile.close()
基本原理:
根据unix里面lseek的描述:
- lseek仅将当前的文件位移量记录在内核内,它并不引起任何I/O操作。然后,该位移量用于下一个读或写操作。
- 文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空调,这一点是允许的。
- 位于文件中但没有写过的字节都被设置为0。