Python读写文件时,二进制方式和普通方式的效率区别取决于文件的类型和大小。
1、写入文本文件
示例代码1: 【小文件】
import timeimport randomrandom_str = ['*', '-', '+', '#', 'a', 'b', 'c', 'd']datas = ''for i in range(1000):s = random.choice(random_str) * i * 10datas += sstart_time1 = time.time()# 二进制方式写入文本文件with open('./data/二进制方式写入.txt', 'bw') as f:f.write(datas.encode())end_time1 = time.time()start_time2 = time.time()# 普通方式写入文本文件with open('./data/普通方式写入.txt', 'w') as f:f.write(datas)end_time2 = time.time()print("二进制方式写入耗时:", end_time1 - start_time1)print("普通方式写入耗时:", end_time2 - start_time2)
运行结果:
示例代码2: 【中大文件】
import timeimport randomrandom_str = ['*', '-', '+', '#', 'a', 'b', 'c', 'd']datas = ''for i in range(1000):s = random.choice(random_str) * i * 250datas += sstart_time1 = time.time()# 二进制方式写入文本文件with open('./data/二进制方式写入.txt', 'bw') as f:f.write(datas.encode())end_time1 = time.time()start_time2 = time.time()# 普通方式写入文本文件with open('./data/普通方式写入.txt', 'w') as f:f.write(datas)end_time2 = time.time()print("二进制方式写入耗时:", end_time1 - start_time1)print("普通方式写入耗时:", end_time2 - start_time2)
运行结果:
示例代码3: 【大文件】
import timeimport randomrandom_str = ['*', '-', '+', '#', 'a', 'b', 'c', 'd']datas = ''for i in range(1000):s = random.choice(random_str) * i * 2000datas += sstart_time1 = time.time()# 二进制方式写入文本文件with open('./data/二进制方式写入.txt', 'bw') as f:f.write(datas.encode())end_time1 = time.time()start_time2 = time.time()# 普通方式写入文本文件with open('./data/普通方式写入.txt', 'w') as f:f.write(datas)end_time2 = time.time()print("二进制方式写入耗时:", end_time1 - start_time1)print("普通方式写入耗时:", end_time2 - start_time2)
运行结果:
2、读取文本文件
示例代码1: 【小文件】【4.76M】
import timestart_time1 = time.time()# 二进制方式读取文本文件with open('./data/二进制方式写入.txt', 'br') as f:f.read()end_time1 = time.time()start_time2 = time.time()# 普通方式读取文本文件with open('./data/普通方式写入.txt', 'r') as f:f.read()end_time2 = time.time()print("二进制方式读取耗时:", end_time1 - start_time1)print("普通方式读取耗时:", end_time2 - start_time2)
运行结果:
示例代码2: 【中大文件】【119M】
import timestart_time1 = time.time()# 二进制方式读取文本文件with open('./data/二进制方式写入.txt', 'br') as f:f.read()end_time1 = time.time()start_time2 = time.time()# 普通方式读取文本文件with open('./data/普通方式写入.txt', 'r') as f:f.read()end_time2 = time.time()print("二进制方式读取耗时:", end_time1 - start_time1)print("普通方式读取耗时:", end_time2 - start_time2)
运行结果:
示例代码3: 【大文件】【952M】
import timestart_time1 = time.time()# 二进制方式读取文本文件with open('./data/二进制方式写入.txt', 'br') as f:f.read()end_time1 = time.time()start_time2 = time.time()# 普通方式读取文本文件with open('./data/普通方式写入.txt', 'r') as f:f.read()end_time2 = time.time()print("二进制方式读取耗时:", end_time1 - start_time1)print("普通方式读取耗时:", end_time2 - start_time2)
运行结果:
3、总结
对于小文件(几百KB以下),普通读写方式和二进制方式的效率差异不大。但是对于大文件(几百MB以上),二进制方式的效率要高于普通读写方式。这是因为二进制方式可以一次读取或写入大量数据,而普通读写方式需要逐行读取或写入数据。
此外,对于二进制文件(如图片、视频、音频等),使用二进制方式读写可以保证文件的完整性和正确性。而对于文本文件,使用普通读写方式可以方便地进行文本处理和编辑。
因此,选择何种方式读写文件应该根据具体情况而定。对于小文件和文本文件,可以使用普通读写方式;对于大文件和二进制文件,使用二进制方式可以提高效率和保证文件的完整性。