我有两个几乎相同的代码。唯一的区别是一个代码使用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的影响?
答案 0 :(得分:0)
所以代码的问题是我可以在Canopy下运行它,如果我的工作目录是我想要使用的目录,但是如果工作目录不同或者我在命令行中则不行。我最后只是更改了代码中的工作目录。