2015-10-23 56 views
1

我想從一個fast5文件寫入數據到一個txt文件。我可以通過進入其中的文件的目錄,並使用此代碼這樣做:h5py無法讀取fast5文件

for filename in os.listdir(os.getcwd()): 
    if filename.endswith('.fast5'): 
     with h5py.File(filename, 'r') as hdf: 
      with open(new_txt, 'a') as myfile: 
       myfile.write('%s \t' % (filename)) 

不過,我現在正試圖通過主目錄訪問文件,通過特定的子文件夾循環,其中文件位於和訪問文件的方式,通過使用此代碼:

for root, dirs, files in os.walk(path):  
    for d in dirs: 
     if d.startswith('pass') or d.startswith('fail') 
      for rootfolder, blankdirs, fast5files in os.walk(d):                                                   
       for filename in fast5files: 
        if filename.endswith('.fast5'): 
         with h5py.File(filename, 'r') as hdf:     
          with open(new_txt, 'a') as myfile:      
           myfile.write('%s \t' % (filename)) 

此代碼提供了錯誤:

IOError: Unable to open file (Unable to open file: name = 'minion2_chip61_re_n90_yt2_2644_1_ch108_file0_strand.fast5', errno = 2, error message = 'no such file or directory', flags = 0, o_flags = 0) 

其迷惑我,因爲它是能夠得到filen ame,但不知何故無法讀取它,它可以在原始代碼下進行讀取。錯誤發生在這條線上:

with h5py.File(filename, 'r') as hdf: 

爲什麼h5py無法以這種方式打開/讀取文件?

回答

1

你需要添加目錄os.walk正在穿越到文件名:

.... 
if filename.endswith('.fast5'): 
    hdf5_path = os.path.join(root, filename) 
    with h5py.File(hdf5_path, 'r') as hdf: 
     ... 
+0

哈哈我理解了它之前我看了你的答案。你的比我的方法更清潔,謝謝! – j2120

+0

SOreadytohelp!很高興你自己發現了這個問題。 –