如何只使用python文件中每行的最后一部分?

时间:2015-03-23 06:39:59

标签: python list sequence reverse

#!/usr/bin/python

import sys, re

fname = sys.argv[1]
barcodefname = sys.argv[2]

barcodefile = open(barcodefname, "r")
#list = open(barcodefname, "r").readlines(-1)

for barcode in barcodefile:
        barcode = barcode.strip()
        print "barcode: %s" % barcode
        outfname = "%s.%s" % (fname, barcode)
        outf = open(outfname, "w")
        handle = open(fname, "r")
        for line in handle:
                potential_barcode = line[:len(barcode)]
                if potential_barcode == barcode:
                        outseq = line[len(barcode):]
                        sys.stdout.write(outseq)
                        outf.write(outseq)
        handle.close()
        outf.close()
barcodefile.close()

我遇到的问题是第二个参数文件看起来像这样:

S1 djgbfgbf
S2 dkffbjfb
S3 lfjbvrid
....etc

我需要找到一种方法来忽略每行开头的S1,S2,S3,并且只将以下字母与参数1文件匹配。在第9行,我正在尝试以某种方式创建一个列表并将其反转,但我不确定这是否是答案。

2 个答案:

答案 0 :(得分:3)

对于像S1 djgbfgbf这样的字符串,如果要忽略第一部分,可以拆分字符串并选择最后一项,此字符串也可以是一行文件:

>>> s='S1 djgbfgbf'
>>> s.split()[-1]
'djgbfgbf'

例如,如果您有一个名为in_file的文件,您可以执行以下列表理解,其结果是所有行的最后一部分 :

[line.split()[-1] for line in open('in_file')]

或者你可以遍历你的文件(效率低于列表理解但可以更灵活):

for line in open('in_file'):
      last_part=line.split()[-1]
      #do stuff with last part

答案 1 :(得分:0)

你可以像Kasra写的那样做。或者,如果你只对最后一个单词感兴趣,你可以从右边分开只进行一次分割,而不是分成所有单词。

In [11]: a="some sentence last word"

In [12]: a.rsplit(maxsplit=1)
Out[12]: ['some sentence last', 'word']

In [13]: a.rsplit(maxsplit=1)[-1]
Out[13]: 'word'