Я ввел некоторые команды оболочки в скрипт python, как показано ниже:
#!/usr/bin/python
import os,sys,re
import gzip
import commands
path = "/home/x/nearline"
for file in os.listdir(path):
if re.match('.*\.recal.fastq.gz', file):
fullpath = os.path.join(path, file)
result = commands.getoutput('zcat fullpath |wc -l')
numseqs = int(result)/4.0
print numseqs
zcat fullpath |wc -l
- это команда оболочки.
Проблема в том, что я определяю fullpath
здесь для всех файлов fastq
, но после того, как он помещен в ' '
, кажется, что этот fullpath
не работает. Как я могу решить эту проблему?
Вы должны конкатенировать строку со значением переменной:
result = commands.getoutput('zcat ' + fullpath + ' |wc -l')
fullpath
- переменная, вам нужно fullpath
ее с остальной командой следующим образом:
result = commands.getoutput('zcat ' + fullpath + ' |wc -l')
Пытаться
commands.getoutput('zcat ' + fullpath + ' |wc -l')
поскольку переменные python не разворачиваются автоматически в строках.
fullpath
for aFile in glob.glob(path+'/*.recal.fastq.gz')
а не использоватьos.listdir()
иos.path.join()
.glob
, обычное простое написаниеre.match('.*\.recal.fastq.gz', file)
- этоfile.endswith('.recal.fastq.gz')
(при условии, что вы также хотели избежать других точек в регулярном выражении).