python blast在线比对、每天可达数万条

背景:在碱基序列,如

TRINITY_DN931509_c0_g1_i1
GCACGTTCTTCTCGATGCTGACGGAGCGAGGCGCGCTGGCGGAGCTGATGGC
GGCGCAGCTGGAGCGAGGGCGCACGCCGCGGGTGCGCCGGCGCCGGCCGC
GCCCCAGGCCCAGGGCCAGGCCGCGCCCGAGGCCGAGGAGTAGGAAATAAT
GATCTGTGACGAAACTAACCCACCCCTCGAGCTTGCGGAAATGCTGGAATCTG
CGACGTAGGCACTACTCGAACTTGAG

需要比对(即Basic Local Alignment Search Tool,BLAST)时,采取的方式主要有如下 :

  1. 美国国立生物技术信息中心(National Center for Biotechnology Information ,NCBI)官网提供免费在线blast服务
  2. 搭建本地的blast环境。
  3. 使用云服务商提供的付费BLAST服务,如blast2go

当需比对碱基序列量少时,即不考虑时间的情况下,上述三种方式均可;但如果需要大量比对时,常规操作下三种方式各有利弊,第一种和第三种的共同点——慢;第二种的比对极大消耗本地服务器集群的算力。本文试图改良第一种方式提高效率

一.啰嗦一下在线BLAST的流程

1.首先进入比对网址:https://blast.ncbi.nlm.nih.gov/Blast.cgi?PROGRAM=blastx&PAGE_TYPE=BlastSearch&BLAST_SPEC=&LINK_LOC=blasttab&LAST_PAGE=blastn
在线blast序列可采用两种上传方式,直接粘贴到输入框,或上传本地序列文件,如下图。
序列上传页面
2.然后根据需要配置其他参数,点击下方的”BLAST” 按钮进入漫长的等待(主要时间为等待NCBI服务器处理提交的序列)如下图
等待比对结果页面
这个页面会自动刷新,当比对完成后刷新出的截面就是结果页面;请注意图中红框标出的”Request ID” 的值,后面要用到。
3.结果页面如下图
比对结果选择下拉框

在多选框选定某特定碱基序列的选项,页面会自动跳转到该结果的页面(通过该页面定义为GetResults()的JavaScript函数),然后再根据需要再此页面索取信息。有时BLAST会匹配不到结果(这是序列自身与数据库中的碱基对没匹配上,请跟后面会提到的比对失败区别开),上图中,选项较浅且以 * 开头的为没有匹配到结果的序列,即这些序列的匹配结果为NULL或空。

二、分析

1.F12碱基序列提交后的等待页面发现页面在不断的发送一个POST包到指定地址,以询问是否出结果,如果出结果则跳转到结果页面(恕小弟才疏学浅没有发现POST包的构成规律)。
2.发现结果页面有GET方法可以访问https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Get&RID=***********;其中***********为上文提到的Request ID;也即是说,提交碱基序列过程和信息抓取过程可以分开,浏览器不必一直等待结果。可以提交序列,然后得到Request ID,另一个程序或设备用Request ID来抓取数据。
3.访问到结果页面后,通过不断选择下拉框的方式来获得同一批提交的不同的碱基序列的结果,而这些操作,使用python+selenium是方便的。
4.不断向NCBI服务器发起比对请求,并使用多线程的方式处理不同比对RID的结果,提高程序效率。

三、实际操作

  1. 环境:

    windows 10+python 3.6.5(推荐搭配PyCharm)+phantomjs +Mysql

  2. 用到的python第三方扩展包:

    1. selenium
    2. pymysql
    3. openpyxl
  3. 预处理:

    1. Mysql中新建table2表存放碱基序列,结构为
niddna

其中n为自增的主键,id为碱基序列的名称,dna为碱基序列。
2.Mysql中新建submit表存放Request ID,结构为

RIDTTimelen

其中TTime为碱基序列提交的时间,len为本次提交的总长度。

将待处理碱基序列导入表table2中。可以参考下列python代码

import pymysql
def sp(st):#分离序列的ID和序列b=st.split('\n')ID=b[0]DNAs=''for i in b:if b.index(i)==0:continueDNAs=DNAs+ireturn ID, DNAs
def DOSQLin(n,idL,DNAs):
#生成插入SQL语句id=idL.split(' ')ID=id[0]sql = "insert into table2 (n,id,dna) values (%s,'%s','%s');"%(n,ID,DNAs)return sql
f = open('C:\\*.fasta','r') #
All=f.read()
a=All.split('>')#每一条序列都是>开头的
del a[0]#删除第一个空元素
#链接数据库
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='luanchen',db='blast')
cur = conn.cursor()
n=1
for i in a:ID,DNA=sp(i)sql=DOSQLin(n, ID, DNA)try:cur.execute(sql)except:prio
cur.close()
conn.cmmit()#提交改变结果
conn.close()

四、提交碱基序列得到Request ID

过程分为下列步骤:

  1. 从mysql表中得到若干条待比对的碱基序列,再将这若干条从mysql表中删除;
  2. 将1中得到的序列生成一个本地文件(*.fasta) ;
  3. 通过selenium的方式打开在线BLAST网页,上传2得到的文件;
  4. 得到上传文件后的Request ID,并保存;
  5. 重复1~4直至mysql table2表中没有序列。

python代码(尽量加了很多注释,实际写得很乱…)

import string
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from threading import Thread
import random
import pymysql
def Fasta(lid,n=50):#读取table2表中若干条数据生成文件file = 'D:\\pills\\%s.fasta' % lid#应该事先创建该文件夹,存放随机生成名字的序列文件,下一步再将其上传到NCBI。conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='luanchen',db='hp')cur = conn.cursor()cur.execute('LOCK tables hp.table2 write')#给table2上表锁,防止多个线程同时读取时,删除序列时发生错误。sql='select n,id,dna from table2 order by n limit %s'% ncur.execute(sql)lf=0di=0f = open(file, 'w') #for i in cur:lf=lf+len(i[2])if lf>30000:#控制提交的总长度,最好不超过3万,否则容易被服务器拒绝print('..')breakdi=di+1f.write('>'+str(i[0])+i[1]+'\n')f.write(i[2]+'\n')cur.execute('delete from table2 order by n limit %s'% di)#取table2的若干条序列后将其在table2中删除conn.commit()cur.execute('Unlock tables;')#解开表锁,使得其他线程可访问该数据表if di==0:return 0cur.close()conn.close()return file
def isExist(driver,id):#判断页面某元素是否存在try:driver.find_element_by_id(id)return Trueexcept:return False
def submit(RIDs,Len=0):f = open('C:\\ursb.txt', 'a+')#备份RID到本地,有可能会有用f.write(RIDs+'\n')f.close()RID = RIDs.split(' ')sql = "insert into blast.submit (RID,len,TTime) values ('%s',%s,now());" % (RID[-1], Len)conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='luanchen', db='hp')cur = conn.cursor()cur.execute(sql)conn.commit()cur.close()conn.close()
def do(path):driver = webdriver.PhantomJS(executable_path="D:/phantomjs-2.1.1-windows/bin/phantomjs")#无头浏览器phantomjs的位置应该指定,或设置环境变量#driver = webdriver.Firefox()#测试时,应使用可见的浏览器,方便发现问题并解决。try:driver.set_page_load_timeout(60)driver.get('https://blast.ncbi.nlm.nih.gov/Blast.cgi?PROGRAM=blastx&PAGE_TYPE=BlastSearch&LINK_LOC=blasthome')except:driver.quit()return do(path)try:upload = driver.find_element_by_id('upl')#sleep(3)upload.send_keys(path)  # send_keys 上传本地文件#print(upload.get_attribute('value'))  # check valuedriver.find_element_by_id('b1').click() #模拟点击BLAST 按钮 提交文件except:driver.quit()return do(path)r = ''for i in range(10):if isExist(driver,'statInfo'):#statInfo 页面元素内部有RIDtry:table_loc = (By.ID, 'statInfo')table_tr_list = driver.find_element(*table_loc).find_elements(By.TAG_NAME, "tr")#通过元素定位方式找到RIDfor tr in table_tr_list:LEN = len(open(path, 'r').read())print(tr.text,LEN)submit(tr.text, Len=LEN)driver.quit()breakbreakexcept:sleep(1)else:continuereturn
def go(lid):#随机生产文件名,go()执行一次提交。#lid并未用到,懒得改了= =suqs=[]Str=''.join(random.sample(string.ascii_letters + string.digits, 4))file=Fasta(Str)do(file)return
def main(n):#注意线程数量和sleep的关系,按照实际情况调节。for i in range(n):try:go(1)sleep(random.randint(6, 15))#随机等待6-15秒except:continue
Thread(target=main,args=(1000,)).start()#这一行代码创建了1个线程,线程不要创建太多,否则会被NCBI拒绝。
sleep(5)
main(1000)

提一下:应该注意自己的Mysql连接方式,并且在代码运行前,在MYSQL上试一下看相关的SQL语句能否运行,比如,第一次执行SQL的批量删除语句时会报错

You are using safe update e and you tried to update a table…

这时应该在MYSQL上执行SET SQL_SAFE_UPDATES = 0;而这种类型的错误在python的错误信息是不体现的。
运行结果:
这里写图片描述

五、通过RID得到比对结果

步骤如下:
1. 通过submit表中的RID构建GET地址(上文二、分析中已提到),并在submit表中删除该条RID。
2. 通过firefox进入1中构建的网址
3. 使用s = Select(driver.find_element_by_id('queryList'))
s.select_by_index(n)
方式改变下拉框的选定,以期跳转到不同碱基序列的页面。
4. 通过元素定位的方式,得到结果页面需要的信息。
5. 重复3~4直至处理完当次RID的所有不同碱基序列的结果。
6. 重复1~5直至submit为空。

在实际操作的情况下,主要有两种比对失败的情况:

  1. 一直不出结果(服务器原因):通过GET访问结果页面却出现等待结果界面,因为五、通过RID获取结果的操作是具有人工(python程序)设置的查询长度限制和20分钟延后性,所以都应该得出结果了。这应该认为是比对失败,跳过该条RID。事实上,当20分钟没有出现结果,数小时后也不会出结果。
  2. 发起的查询请求碱基序列过长,被服务器拒绝,如图:
    请求过长被拒绝
    这种情况视作(通过检查相关元素是否存在来判断)比对失败,跳过该条RID。

除了比对失败的情况,还有一种页面不正常的情况,即选定下拉框选项后页面不跳转到选项对应的结果,这个时候如果抓取信息的话会得到错误的信息(误以为跳转前的信息对应跳转后的信息);通过下图中两个红框内的值是否等同,来判断是否跳转。
判断是否正常跳转如果没跳转用driver.execute_script('GetReasult()')执行页面自带的跳转js代码。

python代码

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import Select
from selenium import webdriver
import threading
from selenium.webdriver.common.by import By
from threading import Thread
from collections import Counter
import random
import pymysql
import os
#停词表
mu = threading.Lock()#线程锁,避免同时读取同意文件发生错误
stop_words=['hypothetical','protein','predictd:']#停词表
def isExist(driver,id):#判断元素是否存在try:driver.find_element_by_id(id)return Trueexcept:return False
def getSc(DESs,Accs):#得分函数。。这应该根据自己需要来定义all=[]for i in DESs:word=i.replace('[', ' ').replace(']', ' ')words=word.split(' ')for j in words:if j.lower() in stop_words:continueall.append(j)count=Counter(all).most_common(2)if len(count)==1:return DESs[0],Accs[0]Wmax=count[0][0]#出现频率最大Wmax0=count[1][0]#第二大#高频得分W0=count[1][1]*0.1W=(count[0][1]-count[1][1])*0.2+W0n=2score=[]for i in range(len(Accs)):sc=0if 'PREDICTED'in DESs[i]:sc=sc-0.4if Wmax in DESs[i]:sc=Welif Wmax0 in DESs[i]:sc=W0else:sc=0Tsc=n+scscore.append(Tsc)n=n-0.2ind=score.index(max(score))return DESs[ind],Accs[ind]
def dele(upid): #删除取得的RIDconn = pymysql.connect(host='47.106.121.42', port=3306, user='root', passwd='luanchen', db='blast')cur = conn.cursor()sql = "delete from submit where RID='%s'"% upidtry:cur.execute(sql)except:print(sql)conn.commit()cur.close()conn.close()
def get_table_content(driver,tableId):#得到表内内容arr=[]arr1=[]DESs=[]Accs=[]table_loc=(By.ID,tableId)
# 按行查询表格的数据,取出的数据是一整行,按空格分隔每一列的数据  try:table_tr_list=driver.find_element(*table_loc).find_elements(By.TAG_NAME,"tr")except:driver.refresh()driver.switch_to_alert().accept()n=0for tr in table_tr_list:n = n + 1if n==1:continueif n>11:breakarr1=(tr.text).split(" ")#以空格拆分成若干个(个数与列的个数相同)一维列表  DES=' '.join(arr1[:-6])Acc=arr1[-1]DESs.append(DES)Accs.append(Acc)des,acc=getSc(DESs,Accs)return des,acc
def output(suc):#输出到文件mu.acquire()#线程锁file = 'D:\\fanal.txt'f = open(file, 'a+')for i in suc:if len(i)<2:continueindex=i[0]n=index[:index.index('T')]id=index[index.index('T'):]f.write('%s\t%s\t%s\t%s\n'%(n,id,i[1],i[2]))f.close()mu.release()#释放锁
def do(driver,ht):#进入结果页面后的操作while(True):if isExist(driver, 'msgFrm') or isExist(driver, 'statInfo'):#这是两种比对错误的情况,一种是一直不出结果(服务器原因),另一种是比对序列太长被服务器拒绝print('wrong!!!')driver.quit()return -1elif isExist(driver, 'descriptions')==False:driver.quit()driver = webdriver.Firefox()driver.get('https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Get&RID=%s' % ht)sleep(4)continueelif isExist(driver, 'queryList'):breakelse:continues = Select(driver.find_element_by_id('queryList'))Nop=s.optionssuc=[]shitbug=[]for i in Nop:shitbug.append(i.text)n=0b=0l=len(shitbug)while(True):#存放选项nameif isExist(driver, 'msgFrm') or isExist(driver, 'statInfo'):#比对失败print('wrong!!!')driver.quit()return -1if(n>=l):breakif '*' in shitbug[n]:#没有比对上item=[]#为了对齐item.append(shitbug[n].split(' ')[1])item.append(' ')item.append(' ')#outline(item)suc.append(item)n=n+1continuesleep(2)try:s = Select(driver.find_element_by_id('queryList'))s.select_by_index(n)sleep(5)#s = Select(driver.find_element_by_id('queryList'))item = []id = driver.find_element_by_xpath("//div[@id='querysummary']/dl/dd[3]").textif id not in shitbug[n]:try:driver.execute_script('GetReasult()')continueexcept:continuedes, acc = get_table_content(driver, 'dscTable')##这是处理得到结果表格的操作,本文主要是通过结果表格每一行的情况得到最合适的describtion和accessitem.append(id)item.append(des)item.append(acc)#outline(item)suc.append(item)n=n+1b=b+1except:driver.refresh()try:driver.switch_to_alert().accept()except:continuesleep(5)driver.quit()if b<5:return 0output(suc)print('done')return suc
def read(n):#从submit表中取一条RID并在表中删除,再构建GET方法,通过打开的浏览器访问GET方法,返回浏览器驱动,再执行do()#参数n当时用来标记的,这段代码没有用到if os.path.exists('C:\\stop.txt'):#作为程序停止的标记,当C:\\stop.txt存在时,程序停止运行return 0conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='luanchen', db='hp')cur = conn.cursor()cur.execute('LOCK tables hp.submit write')#上锁sql = 'select RID,len from hp.submit where now()-TTime>1200 order by TTime limit %s' % 1#SQL语句查询上传时间超过1200秒的RIDcur.execute(sql)n = 0ht=''for i in cur:ht=(i[0])if ht=='':return 0sql = "delete from submit where RID='%s'" % httry:cur.execute(sql)except:print(sql)conn.commit()cur.execute('Unlock tables;')cur.close()conn.close()driver = webdriver.Firefox()#driver = webdriver.PhantomJS(executable_path="E:/phantomjs-2.1.1-windows/bin/phantomjs")while(True):try:driver.get('https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Get&RID=%s' % ht)#get方法得到结果页面sleep(10)breakexcept:driver.quit()#river = webdriver.PhantomJS(executable_path="E:/phantomjs-2.1.1-windows/bin/phantomjs")driver = webdriver.Firefox()driver.get('https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Get&RID=%s' % ht)sleep(10)breaksuc=do(driver,ht)read(n)
def test():t=[]for i in range(15):#这里设置线程数,根据CPU需要设置,建议使用线程池T=Thread(target=read, args=(i,))T.start()sleep(6)
test()

六、总结

  1. 第四过程的最好使用线程池管理线程。
  2. 在一次操作后,会有部分比对失败的序列,应该分析待比对序列和结果,看哪些不在结果中,再将这些漏掉的重新导入mysql table2表中,这个操作不建议在mysql中操作,而用python操作,因为sql语句执行太慢。把每次的待比对序列放入一个备份表是会更方便的
  3. 根据设备和网络情况设置线程数。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 下载电子书比较好的两个网站

    http://www.ibook8.com/http://download.chinaitlab.com/...

    2024/4/4 21:53:52
  2. spring security 的退出logout 和login404错误

    在学习完spring security后,做了一个小项目,登陆的时候没有任何问题,在做退出操作时总是出现404无法访问的错误。在经过2天的不懈努力下,总算解决了,总结下我所知道的几点!1、是否关闭了csrf跨域请求,默认时开启的<!-- 2.4关闭CSRF(跨域请求),默认是开启的 --><…...

    2024/4/18 0:43:35
  3. 7-7 古风排版

    7-7 古风排版(20 分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定的字…...

    2024/4/28 23:14:12
  4. android 数据存储之SharePreference 的几种方式

    1. 常见的 getSharedPreferences(String filename,mode) 指定sp文件的名称,生成的文件名为 filename.xml 2.getPreferences(mode) getPreferences只有一个参数,不能指定文件名,文件名固定为 当前Activity的名字,不包含包名。 3.PreferenceManager.getDefaultSharedPrefer…...

    2024/4/16 22:19:46
  5. 不能随便输入的“netsh winsock reset”

    写这篇文章是因为我在cmd输入了题目中这段命令,结果问题越解决越麻烦。至于为什么输这段指令也是一个悲伤的故事,不再多说。netsh winsock reset这个命令作用是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock …...

    2024/4/16 22:20:10
  6. 【Shiro权限管理】8.Shiro密码的比对

    上一次总结了如何实现一个简单的Shiro认证流程。首先通过前端页面的form表单提交,在Controller 请求处理层获取了form表单中的账号密码,然后获取当前用户的Subject对象,执行了Subject的login方法进行登录操作, 并将账号密码封装进Token对象,作为参数传入。而后面设置了认证…...

    2024/3/31 22:32:24
  7. Springboot+SpringSecurity案例

    Spring Security 简介 Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证…...

    2024/4/19 15:12:32
  8. 天梯赛(c++) 古风排版

    L1-039 古风排版 (20 分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。输入格式:输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。输出格式:按古风格式排版给定…...

    2024/4/19 9:47:51
  9. oracle电子书集合

    非常全的oracle电子书:[url]http://www.ibook8.com/book/Oracle.htm[/url]...

    2024/4/16 22:19:16
  10. Win系统 - NETSH WINSOCK RESET

    简单来说:netsh winsock reset命令含义是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。winsock是windows网络编程接口,从Windows XP SP2开始内置了一条命令使用net…...

    2024/4/16 22:19:46
  11. Spring Boot+Spring Security+Spring Social项目开发(九):Spring Security授权表达式、重构配置方面的内容、数据库RBAC数据模型控制权限

    github已经上传:https://github.com/13652493839/TiHom-Security各位如果觉得博主写得还可以就可以给我star呀哈哈谢谢啦Spring Boot+Spring Security+Spring Social项目开发(八):Spring Security 控制授权、源码解析 Spring Boot+Spring Security+Spring Social项目开发(七)…...

    2024/4/17 4:30:21
  12. 古风排版

    L1-039 古风排版 (20 分)中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。 输入格式: 输入在第一行给出一个正整数N(<),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。 输出格式: 按古风格式排版给定…...

    2024/4/16 22:19:40
  13. Entity Framework 书籍

    《Programming Entity Framework.chm》 英文书籍,地址 http://vip.ibook8.com/2009/4/ProgrammingEntity.rar...

    2024/4/16 22:20:10
  14. 重置winsock目录

    netsh winsock reset转载于:https://www.cnblogs.com/sx66/p/11509892.html...

    2024/4/19 13:02:12
  15. R/BioC序列处理之三:Biostrings模式匹配和序列比对

    Biostrings最后一节,介绍模式匹配和序列比对的相关函数和操作。 下面我们使用拟南芥基因转录起始点上游1kb的序列进行分析。序列文件可以从TAIR网站(http://www.arabidopsis.org)下载。先用readDNAStringSet函数从FASTA文件中读取序列并查看头2个序列的信息: library(Biost…...

    2024/4/16 22:19:52
  16. Spring Security 实现角色继承

    Spring Security 实现角色继承 本文描述如何基于Spring Security 实现角色继承。 权限声明 很多应用基于Spring Security 实现认证过程,通常需要定义一些角色,这些角色可能会有优先级或层次关系。假设我们有三个角色: ADMIN, MODERATOR ,USER. 下面代码进行权限声明: @Secu…...

    2024/4/16 22:39:22
  17. 通过PS调出胶片色调的古风照片

    通过PS调出胶片色调的古风照片 古风人像一直很受欢迎,那么胶片色调的古风人像在后期上是如何制作的呢?我们本篇教程通过实例来制作胶片色调的古风人像照片,整个过程比较详细,从最开始的准备一直到完成悉数教给大家,每种古风后期色调的呈现受众群体不同,所以在色调上拍的人…...

    2024/4/20 10:05:29
  18. 书籍网站

    http://www.ibook8.com/book/delphi.htm...

    2024/4/27 11:09:27
  19. netsh命令改IP和重置winsock(可解决能上QQ不能上网的问题)

    netsh是WIN2K以上版本系统中自带的一个对网络设置的命令。下列指令有效: 此上下文中的命令: .. - 移到上一层上下文级。 ? - 显示命令列表。 aaaa - 更改到 `aaaa 上下文。 abort - 丢弃在脱机模式下所做的更改。 add - 将一个配置项添加到项目列表中。 alias - 添加一个别名 …...

    2024/4/16 22:19:58
  20. C语言实现输入的密码与设置密码进行比对,输入密码可以任意输入。

    int checkPasswd( char *src,int src_length, char * target,int target_length){ int i,j;int isOk;//参数检测 if(!src|| !target|| src_length<=0|| target_length<=0)return -1; for(i=0;i<target_length;i++) {//判断数组边界 if(i+src_length<=target_length…...

    2024/4/16 22:20:04

最新文章

  1. windows ubuntu sed,awk,grep篇:10.awk 变量的操作符

    目录 62. 变量 64. 算术操作符 65. 字符串操作符 66. 赋值操作符 67. 比较操作符 68. 正则表达式操作符 62. 变量 Awk 变量以字母开头&#xff0c;后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。 不像其他编程语言&#xff0c; awk 变量可以直接使…...

    2024/5/1 23:04:51
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 贪心算法|376.摆动序列

    力扣题目链接 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0;int preDiff 0;int result 1;for (int i 0; i < nums.size() - 1; i) {curDiff nums[i 1] - nums[i];if ((pre…...

    2024/5/1 13:23:37
  4. 【Easy云盘 | 第十三篇】分享模块(获取目录信息、获取文件信息、创建下载链接)

    文章目录 4.4.7获取目录信息4.4.8获取文件信息4.4.9创建下载链接 4.4.7获取目录信息 明天做 4.4.8获取文件信息 明天做 4.4.9创建下载链接 明天做...

    2024/5/1 9:08:36
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57