为什么我的python脚本会自行删除?

时间:2017-01-15 16:03:01

标签: python biopython

我正在编写一个脚本,将多个fastq文件转换为fasta和qual。总是当我运行它时,脚本之后的字节为零。

import sys
import re
import os
import fileinput
from Bio import SeqIO
from Bio.Alphabet import IUPAC

Directory = "/users/etc"
def process(Directory):
    filelist = os.listdir(Directory)
    for f in filelist:
        SeqIO.convert(f, "fastq", f.replace(".fastq",".qual"), "qual", alphabet=IUPAC.ambiguous_dna)

my_directory = "/users/etc"
process(my_directory)

我很难同时同时执行fastq到fasta和qual转换 - 只需复制SeqIO.convert行并交换文件格式就行不通了...... 另外,我希望打印一个已经转换了多少文件的数字。

干杯

1 个答案:

答案 0 :(得分:6)

在这个循环中:

filelist = os.listdir(Directory)
for f in filelist:
    SeqIO.convert(f, "fastq", f.replace(".fastq",".qual"), "qual", alphabet=IUPAC.ambiguous_dna)

...您正在遍历目录中的每个文件

不是每个文件都包含Python脚本,或者每个文件都以.fastq结尾,但每个文件

因为'yourscript.py'.replace('.fastq', '.qual')仍然是'yourscript.py',所以这会通过尝试将其用作输出和输入来覆盖Python脚本。

所以,这里有一些注意事项:

  • 保持数据和代码分开。理想情况下,在完全不同的目录中。 $HOME/bin目录是保存自己代码的合适位置 - 如果将该目录添加到PATH,则可以从任何地方运行可执行命令。
  • 在循环中,过滤掉不以.fastq结尾的文件名。这可能看起来像:

    for f in filelist:
        if not f.endswith('.fastq'):
            continue
        SeqIO.convert(f, 'fastq', f[:-len('.fastq')]+'.qual', 'qual', alphabet=IUPAC.ambiguous_dna)
    
  • 由于在添加此检查后我们知道.fastq存在于文件名的 end ,因此我们可以更有效地替换它 - 而不是搜索通过字符串的整个名称,我们可以在最后修剪那么多字符,然后改为添加新的扩展名。这有点快,意味着我们不会修改除扩展名之外的文件名的任何部分。