我写了一个代码来枚举char" a"从文本文件(从pdf复制的简单文本文档):
input_f = open('/home/zebrafish/Desktop/stackq/doc.txt','r')
#text i used in "doc.txt file"
#
#unctional similarities between the ATP binding pockets of
#kinases or between chemotypes of inhibitors that cannot
#be predicted from the sequence of the kinase or the
#chemical structure of the inhibitor.
#We first compared PI3-K family members according to
output_f = open('/home/zebrafish/Desktop/stackq/svm_in.txt','w')
for line in input_f :
a = line
print "\n",
for y in enumerate([x[0] for x in enumerate(line) if x[1]=='a']):
a = ("%d:%d" % (y[0]+1,y[1]+1))
#print a,
output_f.write(a+" ")
input_f.close()
output_f.close()
如果我按照我的要求运行此脚本而不生成输出文件,则此代码的输出如下所示,对于每一行,它计算" a"的位置。与频率一样,如第一行" a"首先在第8位出现两次,在第16位出现第二次,因此列举为" 1:8 2:16"每一行都有一个:
1:8 2:16
1:4 2:47 3:51
1:42
1:7
1:14 2:26 3:40
但是当我在文本文件中写下输出时," svm_in.txt"用" output_f.write()"输出非常有线。 这样的事情:
1:8 2:16 1:4 2:47 3:51 1:42 1:7 1:14 2:26 3:40
如何使用" +"为每行输出结果?像这样在行的开头正弦:
+ 1:8 2:16
+ 1:4 2:47 3:51
+ 1:42
+ 1:7
+ 1:14 2:26 3:40
答案 0 :(得分:3)
请勿打印换行符,而是将其写入文件:
for line in input_f :
output_f.write("\n+ ")
for y in enumerate([x[0] for x in enumerate(line) if x[1]=='a']):
a = ("%d:%d" % (y[0]+1,y[1]+1))
output_f.write(a + " ")
你可以使用一些元组解压缩使你更清楚你所枚举的内容,你可以放弃[..]
列表理解并使用生成器表达式(节省一些内存和处理):
for i, pos in enumerate((pos for pos, char in enumerate(line, 1) if char == 'a'), 1):
output_f.write('%d:%d ' % (i, pos))
我还为enumerate()
函数提供了第二个参数,即起始值,因此您不必每个数字+ 1
,并在字符串格式中添加文件输出中的空格。 / p>
你通常会在写一行之后写新行;如果你想要每行一个计数器,添加另一个枚举::
for count, line in enumerate(input_f, 1):
output_f.write("%d+ " % count)
for i, pos in enumerate((pos for pos, char in enumerate(line, 1) if char == 'a'), 1):
output_f.write('%d:%d ' % (i, pos))
output_f.write('\n')
或者,通过使用str.join()
,您可以一次创建整行,使用格式在一个格式化操作中包含前缀和换行符:
for count, line in enumerate(input_f, 1):
positions = (pos for pos, char in enumerate(line, 1) if char == 'a')
line = ' '.join(['%d:%d' % (i, pos) for i, pos in enumerate(positions, 1)])
output_f.write("%d+ %s\n" % (count, line))
整齐地避免了尾随空间。
答案 1 :(得分:1)
我会这样做:
for line in input_f:
# find the positions of As in the line
positions = [n for n, letter in enumerate(line, 1) if letter == 'a']
# Create list of strings of the form "x:y"
pairs = [("%d:%d" % (i, n)) for i, n in enumerate(positions, 1)]
# Join all those strings into a single space-separated string
all_pairs = ' '.join(pairs)
# Write the string to the file, with a + sign at the beginning
# and a newline at the end
output_f.write("+ %s\n" % all_pairs)
您可以修改最后一行中的字符串,以控制在输出文件中写入行的方式。