根据一行的内容对所有行进行排序

用户名

我有3列数据的Excel文件。我将数据复制到文本板上以使用.txt(制表符分隔)而不是.xls,以便于数据解析。我想根据数字间隔的第一个数字对所有行进行排序,如果它们出现在数字间隔之前,请对单词“ complement”进行排序。我的数据在下面(一些行的第3列空行是1,2,3,5,7,8,9,15):

81228..81500    Gene 22 
81500..81856    Gene 17 
complement(82256..84292)    Gene 75 
84307..85275    Gene 23  2.7.4.8
complement(97435..98067)    Gene 91 
complement(85325..86527)    Gene 34 3.5.1.32
86756..87025    Gene 36 
complement(92373..93341)    Gene 45 
88076..90292    Gene 34 
complement(90289..92415)    Gene 89  3.6.1.-
93492..94931    Gene 92  2.2.1.1
complement(97087..97347)    Gene 12  2.7.7.6
complement(94928..97060)    Gene 58  2.5.6.3, 3.1.8.2
79951..81162    Gene 3   1.7.1.2
complement(87022..87837)    Gene 77
10..1008    Gene 500    
100059..100178  Gene 501    
100470..104660  Gene 502     6.3.5.5
100715..100861  Gene 503    
101721..103604  Gene 504    
101782..103698  Gene 505     1.1.1.49
1018..1137  Gene 506    
10230..11636    Gene 507     6.3.1.2
102328..104049  Gene 508    
10321..12651    Gene 509     2.3.1.16, 2.3.1.9
103256..104290  Gene 510    
103607..104647  Gene 511    
103658..104662  Gene 512     4.1.3.16, 4.1.2.14
103732..106095  Gene 513    
104045..106027  Gene 514    
104057..104305  Gene 515    
10416..14087    Gene 516    
104237..105262  Gene 517     3.1.11.2   

我的预期输出:

79951..81162    Gene 3   1.7.1.2
81228..81500    Gene 22 
81500..81856    Gene 17 
84307..85275    Gene 23  2.7.4.8
86756..87025    Gene 36 
88076..90292    Gene 34 
93492..94931    Gene 92  2.2.1.1
complement(82256..84292)    Gene 75 
complement(85325..86527)    Gene 34 3.5.1.32
complement(87022..87837)    Gene 77 
complement(90289..92415)    Gene 89  3.6.1.-
complement(92373..93341)    Gene 45 
complement(94928..97060)    Gene 58  2.5.6.3, 3.1.8.2
complement(97087..97347)    Gene 12  2.7.7.6
complement(97435..98067)    Gene 91 

我使用python的尝试如下:

import re
import sys
#import csv


pattern = '^complement\(\d+\.{2}\d+\)$'

#pattern = '^complement'

regexp = re.compile(pattern)

input_file = open('infile.txt', 'r')

output_file = open('outfile.txt','w')

for line in input_file:
    item = line[0]
    match = regexp.search(item)
    if match:
              output_file.writerow([line[0],\t,line1[1],\t, line[2]])
      #output_file.writerow(line[0])

#del line[0], line[1], line[2], item

del output_file

我不确定如何从这里继续。有人可以帮忙吗?

道格

像这样的作品:

txt='''\
81228..81500    Gene 22 
81500..81856    Gene 17 
complement(82256..84292)    Gene 75 
84307..85275    Gene 23  2.7.4.8
complement(97435..98067)    Gene 91 
complement(85325..86527)    Gene 34 3.5.1.32
86756..87025    Gene 36 
complement(92373..93341)    Gene 45 
88076..90292    Gene 34 
complement(90289..92415)    Gene 89  3.6.1.-
93492..94931    Gene 92  2.2.1.1
complement(97087..97347)    Gene 12  2.7.7.6
complement(94928..97060)    Gene 58  2.5.6.3, 3.1.8.2
79951..81162    Gene 3   1.7.1.2
complement(87022..87837)    Gene 77 '''

import re

lines=txt.splitlines()

print('\n'.join(sorted(lines, key=lambda s: re.search(r'^((?:\d+)|(?:complement\(\d+))', s).group(1))))

或者,如果确实使用制表符分隔,则可以松散正则表达式并执行以下操作:

txt='''\
81228..81500\tGene 22 
81500..81856\tGene 17 
complement(82256..84292)\tGene 75 
84307..85275\tGene 23\t2.7.4.8
complement(97435..98067)\tGene 91 
complement(85325..86527)\tGene 34\t3.5.1.32
86756..87025\tGene 36 
complement(92373..93341)\tGene 45 
88076..90292\tGene 34 
complement(90289..92415)\tGene 89\t3.6.1.-
93492..94931\tGene 92\t2.2.1.1
complement(97087..97347)\tGene 12\t2.7.7.6
complement(94928..97060)\tGene 58\t2.5.6.3, 3.1.8.2
79951..81162\tGene 3\t1.7.1.2
complement(87022..87837)\tGene 77 '''

lines=txt.splitlines()
print('\n'.join(sorted(lines, key=lambda s: s.split('\t',1)[0])))

但是,由于您要对第一个元素进行排序,因此根本不需要拆分它:

print('\n'.join(sorted(lines)))

以上任何情况,均会打印:

79951..81162    Gene 3   1.7.1.2
81228..81500    Gene 22 
81500..81856    Gene 17 
84307..85275    Gene 23  2.7.4.8
86756..87025    Gene 36 
88076..90292    Gene 34 
93492..94931    Gene 92  2.2.1.1
complement(82256..84292)    Gene 75 
complement(85325..86527)    Gene 34 3.5.1.32
complement(87022..87837)    Gene 77 
complement(90289..92415)    Gene 89  3.6.1.-
complement(92373..93341)    Gene 45 
complement(94928..97060)    Gene 58  2.5.6.3, 3.1.8.2
complement(97087..97347)    Gene 12  2.7.7.6
complement(97435..98067)    Gene 91 

您的评论之一指出,您希望数字的数量而不是按字典顺序计算。

您可以使用自然排序顺序来实现此目的:

import re

data='''\
81728..81500    Gene 22 
81500..81856    Gene 17 
complement(82256..84292)    Gene 75 
812..815    Gene 3 num
complement(822..842)    Gene compliment 3 num75  
811..815    Gene 3 num
'''

def alpha_num_sort(li): 
    def convert(s):
        return int(s) if s.isdigit() else s

    def key_func(key):
        return tuple(convert(c) for c in re.split('([0-9]+)', key))

    return sorted(li, key = key_func)

print '\n'.join(alpha_num_sort(data.splitlines()))    

印刷:

811..815    Gene 3 num
812..815    Gene 3 num
81500..81856    Gene 17 
81728..81500    Gene 22 
complement(822..842)    Gene compliment 3 num75  
complement(82256..84292)    Gene 75 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据一行的内容对所有行进行排序

来自分类Dev

根据另一行中的值对Excel行进行排序

来自分类Dev

如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

来自分类Dev

Python将文件中的每一行与其他所有行进行比较

来自分类Dev

如何将numpy数组的一行与所有其他行进行比较

来自分类Dev

awk 或 sed:如何根据上一行和下一行进行修改

来自分类Dev

根据行模式对行进行排序

来自分类Dev

根据行模式对行进行排序

来自分类Dev

Microsoft Excel如何将第一行转换为列,然后根据第一列对其余行进行排序

来自分类Dev

将每一行与数据框中的所有行进行比较,并将结果保存在每一行的列表中

来自分类Dev

如何遍历文件的每一行并将该文件的每一行与第二个文件的所有行进行匹配?

来自分类Dev

根据Mathematica中的一行对矩阵进行排序

来自分类Dev

根据前一行的值对 SQL 查询进行排序

来自分类Dev

如何根据第一行中的信息对一堆行进行分组?

来自分类Dev

在两列之间分别对每一行进行排序

来自分类Dev

按列值对数据框中的每一行进行排序

来自分类Dev

numpy矩阵,通过对每一行进行排序将0设置为值

来自分类Dev

在R中,对两个匹配数据帧的每一行进行排序

来自分类Dev

弹簧数据:按条件对每一行进行排序

来自分类Dev

如何对熊猫数据框中的每一行进行排序并获取索引?

来自分类Dev

如何按出现次数对每一行进行排序?

来自分类Dev

Pandas 对每一行进行排序并打印前 5 个

来自分类Dev

如何将具有行的记录与另一行进行比较?

来自分类Dev

将第一个文件中的每一行与第二个文件中的所有行进行比较?

来自分类Dev

根据特定的行对MySQL行进行重新排序

来自分类Dev

根据特定的行对MySQL行进行重新排序

来自分类Dev

如何根据列之一对行进行排序?

来自分类Dev

根据列的第一个值对所有行进行子集

来自分类Dev

jQuery-获取一行的所有内容

Related 相关文章

  1. 1

    根据一行的内容对所有行进行排序

  2. 2

    根据另一行中的值对Excel行进行排序

  3. 3

    如何根据行的排序值对pandas数据帧的每一行进行排序并返回列索引

  4. 4

    Python将文件中的每一行与其他所有行进行比较

  5. 5

    如何将numpy数组的一行与所有其他行进行比较

  6. 6

    awk 或 sed:如何根据上一行和下一行进行修改

  7. 7

    根据行模式对行进行排序

  8. 8

    根据行模式对行进行排序

  9. 9

    Microsoft Excel如何将第一行转换为列,然后根据第一列对其余行进行排序

  10. 10

    将每一行与数据框中的所有行进行比较,并将结果保存在每一行的列表中

  11. 11

    如何遍历文件的每一行并将该文件的每一行与第二个文件的所有行进行匹配?

  12. 12

    根据Mathematica中的一行对矩阵进行排序

  13. 13

    根据前一行的值对 SQL 查询进行排序

  14. 14

    如何根据第一行中的信息对一堆行进行分组?

  15. 15

    在两列之间分别对每一行进行排序

  16. 16

    按列值对数据框中的每一行进行排序

  17. 17

    numpy矩阵,通过对每一行进行排序将0设置为值

  18. 18

    在R中,对两个匹配数据帧的每一行进行排序

  19. 19

    弹簧数据:按条件对每一行进行排序

  20. 20

    如何对熊猫数据框中的每一行进行排序并获取索引?

  21. 21

    如何按出现次数对每一行进行排序?

  22. 22

    Pandas 对每一行进行排序并打印前 5 个

  23. 23

    如何将具有行的记录与另一行进行比较?

  24. 24

    将第一个文件中的每一行与第二个文件中的所有行进行比较?

  25. 25

    根据特定的行对MySQL行进行重新排序

  26. 26

    根据特定的行对MySQL行进行重新排序

  27. 27

    如何根据列之一对行进行排序?

  28. 28

    根据列的第一个值对所有行进行子集

  29. 29

    jQuery-获取一行的所有内容

热门标签

归档