Board logo

标题: [文本处理] 【已解决】批处理如何将数据按指定规则进行合并,并按照另一个文本的顺序输出? [打印本页]

作者: sweet惜缘    时间: 2016-1-19 16:20     标题: 【已解决】批处理如何将数据按指定规则进行合并,并按照另一个文本的顺序输出?

http://pan.baidu.com/s/1jHs2Ud4——DDI.txt
-——index.txt

DDI.txt内容如下:
drug1 id        drug2 id
DB00005        DB06372
DB00005        DB01656
DB00005        DB06688
DB00005        DB06273
DB00005        DB08895
DB00005        DB00072
DB00005        DB09033
DB00006        DB00054
DB00006        DB01418
DB00006        DB00945
DB00006        DB00009
...
index.txt内容如下:
DB00005
DB00175
DB00177
DB00178
DB00190
DB00191
DB00193
DB00199
DB00201
...
希望得到的Out.txt内容如下(即提取DDI.txt中所有有index中drug_ID那一行的另一个字符附在后面):
DB00005 DB06372 DB01656 DB06688 DB06273  DB08895 DB00072  DB09033
DB00175 ...
...


跪求大神解答~~真要跪了 = =
之前的代码有问题~火烧眉毛
作者: sweet惜缘    时间: 2016-1-19 17:33


灰常感谢
作者: codegay    时间: 2016-1-19 18:14

这智商得低到什么程度,经常地来问这种重复性的问题。
作者: codegay    时间: 2016-1-19 20:04

  1. """
  2. 正则读取文本查找合并.py
  3. 依山居 2016年1月19日 19:14:51
  4. http://bbs.bathome.net/thread-39134-1-1.html
  5. """
  6. import re
  7. import time
  8. start=time.time()
  9. print("运行中..."*3)
  10. index=open("index.txt").read()
  11. indexlist=re.findall(r"DB\d+",index)
  12. DDI=open("DDI.txt").read()
  13. with open("out.txt","w+") as f:
  14.     for r in indexlist:
  15.         DDIlist=re.findall(r"%s.*(DB\d+)" % r,DDI)
  16.         f.write(r+' '+' '.join(DDIlist)+"\n")
  17. end=time.time()
  18. pt=end-start
  19. print("运行耗时:",pt)
  20. try:
  21.     input("按回车退出")
  22. except SyntaxError:
  23.     pass
复制代码

作者: sweet惜缘    时间: 2016-1-20 10:21

回复 4# codegay


    太棒啦~~~觉得python语言比批处理好懂很多~~~灰常感谢~~好人一生平安
作者: sweet惜缘    时间: 2016-1-20 10:42

回复 4# codegay


    这样只提取出DDI第一列在index中存在的~,事实上还有第二列的~举个栗子~如下
DB00005        DB06372
DB00005        DB01656
DB00005        DB06688   
DB08895        DB00005
DB06273        DB00005   
这样提取出来的out会是
DB00005  DB06372 DB01656 DB06688  而没有后面DB08895 DB06273的数据 。
这种应该怎么修改呢?谢谢山居大神~~~~
作者: sweet惜缘    时间: 2016-1-20 10:52

回复 4# codegay


    好啦~我自己解决啦~~谢谢大神
作者: 回家路上    时间: 2016-1-20 12:23

水一发
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "skip=1 tokens=1*" %%i in (DDI.txt) do (
  3. if defined %%i (
  4. set %%i=!%%i! %%j
  5. ) else set %%i=%%j
  6. echo;%%i !%%i!
  7. )
  8. echo;==========输出结果==========
  9. for /f %%i in (index.txt) do echo;%%i !%%i!
  10. pause & exit /b
复制代码

作者: sweet惜缘    时间: 2016-1-20 19:57

回复 8# 回家路上


    感谢!!
作者: CrLf    时间: 2016-1-21 01:10

本帖最后由 CrLf 于 2016-1-21 02:14 编辑
  1. @mshta http://bathome.net/s/hta/^
  2.     var obj={};^
  3.     type('DDI.txt').split(/\r\n/).slice(1)^
  4.         ._each(function(str){m=str.split(/\s+/g);obj[m[0]]=(m[0] in obj?obj[m[0]]:m[0])+'\t'+m[1]});^
  5.     values(obj).join('\r\n')^
  6.     >"输出.txt"
复制代码

作者: sweet惜缘    时间: 2016-1-21 11:04

回复 10# CrLf


    感谢!!!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2