Python for循环不在一个脚本中运行,但在另一个脚本中运行

时间:2015-10-28 17:19:04

标签: python for-loop

我有两个几乎相同的代码。唯一的区别是一个代码使用argparse,因此可以从命令行运行,如下所示:

parser = argparse.ArgumentParser()
parser.add_argument('directory', help = 'Main Directory of Files')
parser.add_argument('chip_num', help = 'Chip Number')
args = parser.parse_args()

path = args.directory
chip_num = args.chip_num

其他代码只是将path和chip_num定义为我写入脚本的变量。

我在下面的代码遍历目录中的子文件夹(编辑长度,但给出主图)。

for root, dirs, files in os.walk(path):     
for d in dirs:
    if d.startswith('pass') or d.startswith('fail'):
        new_txt = 'Chip%s%s.txt' % (chip_num, d)
        path_new = os.path.join(results_dir, new_txt)

        tot_qscore = 0
        tot_reads = 0

        with open(path_new, 'w') as myfile:                
            myfile.write('File Name \t')
            ## writes other titles

        for rootfolder, blankdirs, fast5files in os.walk(d):        
            for filename in fast5files:
                if filename.endswith('.fast5'):
                    filepath = os.path.join(rootfolder, filename) 
                    with h5py.File(filepath, 'r') as hdf:                               
                        with open(path_new, 'a') as myfile:                                   
                            myfile.write('%s \t' % (filename))
                            ## gets other variables and prints it to the file
                            tot_qscore += qscore
                            tot_reads += 1

        avg_qscore = float(tot_qscore / tot_reads)

虽然代码在我写入变量的脚本中运行完美,但是可以与命令行一起使用的脚本能够运行脚本,但不知何故绕过遍历'd'目录的for循环(对于root文件,blankdirs,os.walk(d)中的fast5files)并直接计算avg_qscore,因此给出了由于tot_reads没有增加而我除以零的错误。

是否有任何理由它正在跳过for循环......是否受到argparse的影响?

1 个答案:

答案 0 :(得分:0)

所以代码的问题是我可以在Canopy下运行它,如果我的工作目录是我想要使用的目录,但是如果工作目录不同或者我在命令行中则不行。我最后只是更改了代码中的工作目录。