我有一个代码,看起来像这样
require 'net/http'
base = 'www.uniprot.org'
tool = 'mapping'
params = {
'from' => 'ACC+ID', 'to' => 'P_ENTREZGENEID', 'format' => 'tab',
'query' => 'A0A0K3AVS5 A0A0K3AVV4 A0A0K3AW32 A0A0K3AWP0'
}
http = Net::HTTP.new base
$stderr.puts "Submitting...\n";
response = http.request_post '/' + tool + '/',
params.keys.map {|key| key + '=' + params[key]}.join('&')
loc = nil
while response.code == '302'
loc = response['Location']
response = http.request_get loc
end
while loc
wait = response['Retry-After'] or break
$stderr.puts "Waiting (#{wait})...\n";
sleep wait.to_i
response = http.request_get loc
end
response.value # raises http error if not 2xx
puts response.body这就给了我所需要的。然而,我有两个问题
1-如何加载查询列表,而不是解析成代码?假设我保存了一个txt文件,其中包含我想要的所有查询到mac的桌面
2-如何导出输出?
如果我有
B2D6P1
G5EC52
B2FDA8-2
B2MZB1
B3CJ34
B3CKG1
B3GWA1@tadman展示的内容给了我答案,但我有以下几点
B2D6P1
G5EC52;B2D6P4
B2FDA8-2;B2FDA8
B2MZB1;P18834
B3CJ34
B3CKG1
B3GWA1;Q8I7K5答案是这样的
B2D6P1 rmd-2
G5EC52 tlf-1
B2D6P4 tlf-1
B2FDA8 smc-3
B2MZB1 col-14
P18834 col-14
B3CJ34 gcn-1
B3CKG1 urm-1
B3GWA1 nono-1
Q8I7K5 nono-1我想要的是,如果我在每一行中有两个条目(用;分隔),导致类似的输出,它只给我一个,否则给我他们拥有的所有条目。例如,在上面的例子中,我想要的输出是
B2D6P1 rmd-2
G5EC52;B2D6P4 tlf-1
B2FDA8-2;B2FDA8 smc-3
B2MZB1;P18834 col-14
B3CJ34 gcn-1
B3CKG1 urm-1
B3GWA1;Q8I7K5 nono-1这是可能的吗?
发布于 2016-08-14 18:33:43
正在读取查询数据:
query = File.readlines('ids.txt').map(&:chomp).join(' ')这样,您可以将它们放在单独的行中,更容易编辑,并且在提交时它们是空格分隔的。
这使得你的params看起来像:
params = {
'query' => query,
...
}写入数据:
File.open('output.txt', 'w') do |f|
f.write(response.body)
end非那样做不行。如果它是字符串,或者可以转换为字符串,则可以将其写入文件。
https://stackoverflow.com/questions/38940863
复制相似问题