2012-05-29 5 views
0

У меня есть небольшая проблема с программой python, которую я написал, чтобы извлечь некоторую информацию из специального текстового файла. То, что я пытаюсь сделать, это объединить ~ 500 списков, а затем использовать полученный объединенный список. Цикл (код ниже) должен выполнить мою функцию extract_zcoords() более 500 файлов (1 файл дает один список), чтобы я мог построить набор данных.IOError при попытке открыть существующие файлы

----- КОД

#!/usr/local/bin 
import os,string 
from sys import version 

    # ******** 
    def extract_zcoord(filename): 
     ''' collect z-coordinates of atoms from charged amino acids ''' 
     f = open(filename, 'r')  
     pdbfile = f.readlines() 

    ### Code that processes file and builds z_coords1 list 
    ### .... 

     for i in range(len(charged_groups)): 
     z_coords1.append(float(charged_groups[i][48:54])) 

    print z_coords1 #diagnostic 
    return z_coords1 
    # ******** 


     ### LOOP OVER DIRECTORY 
     location = '/Users/spyros/Desktop/3NY8MODELSHUMAN/HomologyModels' 
     zdata = [] 
     for filename in os.listdir(location): 
     try: 
      zdata.extend(extract_zcoord(filename)) 
     except NameError: 
      print "No such file!" 
     except SyntaxError: 
      print "Check Your Syntax!" 
     except IOError: 
      print "PDB file NOT FOUND!" 


    print 'Z-VALUES FOR ALL CHARGED RESIDUES' 
    print zdata #diagnostic 

    import pickle 

    f1 = open("z_coords1.dat", "wb") 
    pickle.dump(zdata, f1) 
    f1.close() 

    f2 = open("z_coords1.dat", "rb") 
    zdata1 = pickle.load(f2) 
    f2.close() 

    assert zdata == zdata1, "error in pickle/unpickle round trip!" 

ОШИБКА: IOException является тот, который имеет место, поэтому по некоторым причинам питон не имеет доступа к файлам. Я зарегистрировал путь к каталогу (местоположение) и , и они верны (читайте + пишите). Любые идеи о том, почему сообщение IOError должно было бы сообщаться, когда файлы действительно существуют, а путь - правильный?

Я пробовал os.pathisfile (место), и он возвращается FALSE. Я не совсем уверен, , что делать этого, так как при попытке

for filename in os.listdir(location): 
    print filename 

Я получаю все файлы имена, напечатанные на экране! Какие-нибудь идеи, что может быть неправильным?

+0

Может ли кто-нибудь подумать о причине не всегда использовать необработанные строки при указании путей? Есть ли недостаток в этом? (* не * предлагая это как причину проблемы, просто заставил меня задуматься о минимизации потенциальных проблем с помощью путей и т. д.) – Levon

ответ

2

Вы должны присоединиться и имя файла, имя-каталога в один полный путь:

location = '/Users/spyros/Desktop/3NY8MODELSHUMAN/HomologyModels' 
for filename in os.listdir(location): 
    filename = os.path.join(location, filename) 
+0

Спасибо, это было так просто! – Spyros

5

Вероятно, вы должны использовать os.path.join при вызове

zdata.extend(extract_zcoord(filename)) 

так:

zdata.extend(extract_zcoord(os.path.join(location, filename))) 
+0

Спасибо, очень просто! – Spyros