#!/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行,我正在尝试以某种方式创建一个列表并将其反转,但我不确定这是否是答案。
答案 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'