1
$\begingroup$

I am working on a fasta file and am writing my command in nano within command-line and executing using python, also within a command line.

My objective is to get my command to provide me with a tab delimited file with three columns: first column should contain my sequence name, second column should provide me with my sequence length, and the third column should show the sequence itself.

I have written the following command so far within nano:

For example, I would like my command to provide me with the desired output and with the following order: Gene name ; Gene length ; Gene seq

A06842X 45 GORHQRIHQEERHEUWOHRPPTRWFAWWEAKJNFWEJQEFQEPRT

Jb4329PC 21 LDHKQAJTYOWEPLKFREEQW
$\endgroup$
2
  • 1
    $\begingroup$ Hi @KamilSJaron, I appreciate the help! The reason why I am doing this is because it makes it easier for me to easily detect which genes I could disregard if they are over a certain length. For the command below, I tried it, but I received a "TypeError: sequence item 2: expected str instance, Seq found". I tried googling this but was not able to find anything. $\endgroup$
    – AlphaQueUp
    Commented Nov 15, 2020 at 18:03
  • $\begingroup$ Yeah, I forgot to convert the Seq class to str class before creating the line, see the edit, it should work now. Regarding the utility of such table, I guess I would always get the gene length on the fly (every time you have the sequence of a gene is really easy to get the length too in any language). $\endgroup$ Commented Nov 15, 2020 at 18:20

1 Answer 1

1
$\begingroup$

I have no idea what do you want to do with fasta files reformatted like this, but I think something like this should do the job (untested):

from Bio import SeqIO 
import sys 

for olig_fasta in SeqIO.parse(sys.argv[1], "fasta"):

  name = olig_fasta.name
  seq = str(olig_fasta.seq)
  seq_len = str(len(olig_fasta.seq))

  print("\t".join([name, seq_len, seq]))
$\endgroup$
2
  • 1
    $\begingroup$ Based on OP's desired order, it should be print("\t".join([name, str(seq_len), seq]). $\endgroup$
    – Ram RS
    Commented Nov 15, 2020 at 17:04
  • $\begingroup$ Yeah, you can prin Seq, but to manipulate it as a string one needs to convert it to string using str command (I edited the answer, now it should work) $\endgroup$ Commented Nov 15, 2020 at 18:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.