【发布时间】:2017-06-15 06:56:05
【问题描述】:
我正在编写一个脚本,该脚本读取文件文件夹(每个文件的大小从 20 MB 到 100 MB 不等),修改每行中的一些数据,然后写回文件的副本。
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.writelines('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
在使用 90 MB 文件(约 900,000 行)运行此代码时,它会打印 140 秒作为写入文件的时间。这里我使用了writelines()。所以我搜索了不同的方法来提高文件写入速度,在我阅读的大多数文章中,它说write() 和writelines() 应该没有任何区别,因为我正在编写单个连接字符串。我还检查了仅以下语句所花费的时间:
new_string = '\n'.join(new_my_list) + '\n'
而且只用了 0.4 秒,所以耗时大不是因为创建列表。
只是为了尝试write() 我尝试了这段代码:
with open(inputPath, 'r+') as myRead:
my_list = myRead.readlines()
new_my_list = clean_data(my_list)
with open(outPath, 'w+') as myWrite:
tempT = time.time()
myWrite.write('\n'.join(new_my_list) + '\n')
print(time.time() - tempT)
print(inputPath, 'Cleaning Complete.')
它打印了 2.5 秒。为什么write() 和writelines() 的文件写入时间差异如此之大,即使它们是相同的数据?这是正常行为还是我的代码有问题?两种情况的输出文件似乎都是一样的,所以我知道数据没有丢失。
【问题讨论】:
-
赞成找到一种扭曲的方式来使用具有预期结果的 writelines 并发现一个意想不到的警告。
-
我的 clean_data() 函数也删除了每一行,因此删除了额外的换行符。
标签: python performance file file-writing