Joë*_*lle 5 python sorting bash numeric lexicographic
所以我一直在研究一种将一些信息组合成"床"格式的Python脚本.这意味着我正在使用基因组上的功能,我的第一列是脚手架名称(字符串),第二列是脚手架上的起始位置(整数),第三列是停止位置(整数),其他列包含与我的问题无关的其他信息.我的问题是我的输出未分类.
现在我知道我可以使用这个bash命令对文件进行排序:
$sort -k1,1 -k2,2n -k3,3n infile > outfile
Run Code Online (Sandbox Code Playgroud)
但是在兴趣方面,我想知道是否有办法在Python中实现这一点.到目前为止,我只看到基于列表的排序,处理词典或数字排序.不是两者的结合.那么,你们有什么想法吗?
我的数据片段(我想按列1,2和3排序(按此顺序)):
Scf_3R 8599253 8621866 FBgn0000014 FBgn0191744 -0.097558026153
Scf_3R 8497493 8503049 FBgn0000015 FBgn0025043 0.437973284047
Scf_3L 16209309 16236428 FBgn0000017 FBgn0184183 -1.19105585707
Scf_2L 10630469 10632308 FBgn0000018 FBgn0193617 0.073153454539
Scf_3R 12087670 12124207 FBgn0000024 FBgn0022516 -0.023946795475
Scf_X 14395665 14422243 FBgn0000028 FBgn0187465 0.00300558969397
Scf_3R 25163062 25165316 FBgn0000032 FBgn0189058 0.530118698187
Scf_3R 19757441 19808894 FBgn0000036 FBgn0189822 -0.282508464261
Run Code Online (Sandbox Code Playgroud)
加载数据,使用 排序sorted,写入新文件。
# Load data
lists = list()
with open(filename, 'r') as f:
for line in f:
lists.append(line.rstrip().split())
# Sort data
results = sorted(lists, key=lambda x:(x[0], int(x[1]), int(x[2])))
# Write to a file
import csv
with open(filename, 'w') as f:
writer = csv.writer(f, delimiter='\t')
writer.writerows(results)
Run Code Online (Sandbox Code Playgroud)