以下代码从一个大的文本文件中随机获取几行,并将原始大文件分成两部分。在最后的“for”循环中,将文本写入两个文件非常缓慢。是否可以使用multiprocessing模块使其更快?我对此还不熟悉。
with open('bigfile.txt', 'r') as f, \
open('split1.txt', 'w') as a, \
open('split2.txt', 'w') as b:
all_lines = f.readlines()
size = len(all_lines)
print("total size: ", str(size))
line_numbers = []
for i in range(size):
line_numbers.append(i)
random_sample_line_numbers = shuffle_list(line_numbers, 30000)
print('Random sample size: ', str(len(random_sample_line_numbers)))
for i in range(size):
print(i)
if i in random_sample_line_numbers:
b.write(all_lines[i])
else:
a.write(all_lines[i])
print("Randomize done!")
编辑:
def shuffle_list(l, n):
if n>=len(l):
raise ValueError("Invalid randomized number. Out of list index boundary")
shuffle(l)
return l[:n]
这需要数小时才能将大约2000万行的文件分割。该文件的总大小为2.6G。
shuffle_list
,还是它是内置的?如果你自己编写了,能否描述一下它的功能或者在这里贴出代码呢? - smac89i
测试速度会更快。但是我不知道该测试占用了您总时间的多少。 - jasonharper