urs*_*rei 17
你考虑过使用*nix sort程序吗?用原始术语来说,它可能比大多数Python脚本更快.
使用-t $'\t'指定它的制表符分隔,-k n指定域,其中n为外地号码,-o outputfile如果你想将结果输出到一个新文件.例:
sort -t $'\t' -k 4 -o sorted.txt input.txt
Run Code Online (Sandbox Code Playgroud)
将input.txt对其第4个字段进行排序,并将结果输出到sorted.txt
您想为文件构建内存索引:
open 文件f.readline(),并在列表中存储一个元组,该元组由您要排序的值(提取line.split('\t').strip())和文件中行的偏移量(您可以在调用f.tell()之前通过调用获得f.readline())close 文件sort 列表然后打印已排序的文件,重新打开文件,对于列表的每个元素,使用f.seek(offset)将文件指针移动到行的开头,f.readline()以读取行和print行.
优化:您可能希望在列表中存储行的长度,以便您可以f.read(length)在打印阶段使用.
示例代码(针对可读性而非速度进行了优化):
def build_index(filename, sort_col):
index = []
f = open(filename)
while True:
offset = f.tell()
line = f.readline()
if not line:
break
length = len(line)
col = line.split('\t')[sort_col].strip()
index.append((col, offset, length))
f.close()
index.sort()
return index
def print_sorted(filename, col_sort):
index = build_index(filename, col_sort)
f = open(filename)
for col, offset, length in index:
f.seek(offset)
print f.read(length).rstrip('\n')
if __name__ == '__main__':
filename = 'somefile.txt'
sort_col = 2
print_sorted(filename, sort_col)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10272 次 |
| 最近记录: |