代码小白liu 发表于 2021-8-20 22:04:39

python 问题求助

本身是别的小伙伴问的问题,由于本人学艺不精,解题一半就卡住了:
需要提取一行ID 一行序列号,以ID为名简历文件夹,相同ID的序列号均存放在一个ID文件里
import re
text = '''
>FA-Oe9L01-01
TCGTTTTGGTATTTTCTCTTTTGTCTTTTA
>FA-Oe9L01-01
TCGTTTTGGTATTTTCTCTTTTGTCTTTAA
>FA-Oe9L01-01
TCGTTTTGGTATTTTCTCTTTTGTCTTTTA
>FA-Oe9L01-03
GATGTGCACATAGAGATGTCTTACTGCACC
>FA-Oe9L01-03
GATGTGCACATAGAGATGTCTTACTGCAGC
>FA-Oe9L01-03
GATGTGCACATAGAGATGTCTTACTGCACC
>FA-Oe9L01-03
GATGTGCACATAGAGATGTCTTACTGCACA
'''

Id = re.compile("+-+-\d+") #匹配ID

Xulie = re.compile("{30}") #匹配序列号

Id_list = re.findall(Id, text)
# print(Id_list)
Xulie_list = re.findall(Xulie, text)
for i in Id_list:
    with open(i, "w+") as f:
      for j in Xulie_list:

            f.write(j)





ID和序列号我都正则匹配出来了,在保存的时候我遇到了问题
本来想的是一个ID建一个文件夹,然后对应序列号存进去,ID文件夹已经存在时,就直接把序列号写入
我这么写肯定是不对,文件名能出来,但是内容会写进全部的序列号,这个希望大佬指导下


或者说用字典形式吗?一个ID对应多个值,存入字典,然后用字典的键和值分别对应文件名和内容是不是好点,但是一个ID对应多个值这个字典不大知道改如何写出来

kogawananari 发表于 2021-8-20 22:15:57

看不懂但是内容会写进全部的序列号这句话是什么意思不过正则肯定可以优化 毕竟字母只有AGCTU

kogawananari 发表于 2021-8-20 22:39:52

from pathlib import Path
cwd = Path.cwd()
thiskey = '无id'
opt_dir = cwd / Path('opt')
opt_dir.mkdir(parents=True, exist_ok=True)
with open(cwd / Path('fasta.txt')) as f:
    for line in f.readlines():
      if line == '>':
            thiskey = line
      else:
            with open(opt_dir.joinpath(thiskey+'.txt'),'a') as id:
                id.write(line)

代码小白liu 发表于 2021-8-21 08:34:17

kogawananari 发表于 2021-8-20 22:39


这块知识还没学过,尴尬研究一下,感谢回答

代码小白liu 发表于 2021-8-21 08:34:52

kogawananari 发表于 2021-8-20 22:15
看不懂但是内容会写进全部的序列号这句话是什么意思不过正则肯定可以优化 毕竟字母只有AGCTU

就是会新建两个文件,但是每个文件的内容是全部序列号

kogawananari 发表于 2021-8-21 11:19:10

代码小白liu 发表于 2021-8-21 08:34
就是会新建两个文件,但是每个文件的内容是全部序列号

这不就是需求吗{:10_289:}

赖宝宝 发表于 2021-8-22 23:16:14

给我的感觉,你的需求很简单,能轻松实现,但是你没表述明白,我给不出一个具体的代码

代码小白liu 发表于 2021-8-29 17:00:31

赖宝宝 发表于 2021-8-22 23:16
给我的感觉,你的需求很简单,能轻松实现,但是你没表述明白,我给不出一个具体的代码

第一行是ID第二是ID对应的序列号,新建文件,以ID为文件名,序列为内容,相同ID的序列号存入到一个文件夹
页: [1]
查看完整版本: python 问题求助