2017-09-08 5 views
0

Ich bin etwas verwirrt über einen Fehler, den ich bei der Verwendung von h5py erhalte. Ich versuche, ein Python-Skript anzuwenden, um Sätze von h5py-Dateien in verschiedenen Verzeichnissen zu durchlaufen. Zum Beispiel wird der erste Satz von h5py Dateien aufh5py OSError: Datei kann nicht geöffnet werden (Dateisignatur nicht gefunden)

Reduced/rho=0.75/2/Data/snapshots

befindet Wenn ich den Python-Skript von ein Unterverzeichnis von Reduced

Reduced/test_h5py

mit dem folgenden Python-Skript

import h5py 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.colors as colors    
import cmocean 
import os 

de.logging_setup.rootlogger.setLevel('ERROR') 


# Plot writes                               

path = '../rho=0.75/2/Data/snapshots' 
for filename in os.listdir(path): 
    with h5py.File(path+'/'+filename,'r') as file: 
laufe

alles funktioniert gut, das Skript durchläuft die Daten und gibt mir eine Ausgabe. Nun stellt sich die Frage, wenn ich versuche, das gleiche Python-Skript zu anderen Daten in dem Satz von h5py Dateien auf

Reduced/rho=0.75/4/Data/snapshots

Jetzt befindet sich also bewerben, wenn ich ausführen, um die vorherigen Python-Skript mit nur einer Änderung in dem Weg von 2 zu 4

import h5py 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.colors as colors    
import cmocean 
import os 

de.logging_setup.rootlogger.setLevel('ERROR') 


# Plot writes                               

path = '../rho=0.75/4/Data/snapshots' 
for filename in os.listdir(path): 
    with h5py.File(path+'/'+filename,'r') as file: 

ich die folgende Fehlermeldung erhalten

Traceback (most recent call last): 
    File "newest_edit.py", line 17, in <module> 
    with h5py.File(path+'/'+filename,'r') as file: 
    File "/usr/local/lib/python3.5/site-packages/h5py/_hl/files.py", line 269, in __init__ 
    fid = make_fid(name, mode, userblock_size, fapl, swmr=swmr) 
    File "/usr/local/lib/python3.5/site-packages/h5py/_hl/files.py", line 99, in make_fid 
    fid = h5f.open(name, flags, fapl=fapl) 
    File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper 
    File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper 
    File "h5py/h5f.pyx", line 78, in h5py.h5f.open 
OSError: Unable to open file (file signature not found) 

Kann jemand Sinn davon? Ich dachte, es könnte ein os.listdir() Fehler sein, aber nach der Suche habe ich nichts gefunden, um das Problem zu lösen. Danke für Ihre Hilfe.

EDIT:

Ich vergaß zu erwähnen. Wenn ich das Python-Skript in einem Jupyter-Notizbuch ausführe und das Skript auf einzelne h5py-Dateien anwende, funktioniert es sowohl für die Pfade 2 als auch 4 gut. Die h5py-Dateien öffnen sich und ich kann die auf ihnen gespeicherten Daten abrufen, so dass ich mir nicht vorstellen kann, dass es beschädigte Dateien oder nicht im hdf5-Format sein würde.

+0

die Nachricht Dateisignatur nicht gefunden schlägt vor, die Datei ist entweder beschädigt oder nicht im HDF5-Format –

+0

@Fady Saad Sorry, ich habe vergessen zu erwähnen.Wenn ich das Python-Skript in einem Jupyter-Notizbuch ausführe und das Skript auf einzelne h5py-Dateien anwende, funktioniert es einwandfrei, die h5py-Dateien öffnen sich und ich kann Daten abrufen, daher kann ich mir nicht vorstellen, dass es beschädigte Dateien oder nicht im hdf5-Format sein würde. – Mattos

Antwort

0

Ich weiß nicht wirklich, worüber ich hier spreche, also sorry im Voraus, wenn das keinen Sinn macht oder hilft oder einfach nicht verwandt ist.

Es ist ein extrem ärgerlicher Fehler, den niemand seit über einem Jahr versucht hat zu beantworten, also dachte ich mir, das winzige Wissen, das ich habe, könnte helfen.

Ich hatte ein ähnliches Problem während der Arbeit an einem Cluster. Es stellte sich heraus, dass h5py etwas namens flock() verwendet und dass dies manchmal eine negative Auswirkung auf die Leistung des Dateisystems haben kann.

Aus diesem Grund ist flock() manchmal nicht erlaubt. Wenn Sie an einem anderen Dateisystem arbeiten, dann fragen Sie den Administrator, ob er es erlaubt und wenn nicht, kann ich keinen Weg finden (ich habe nicht versucht, andere Bibliotheken zu finden, die nicht flock() verwenden).

Wenn es Ihr eigenes Dateisystem ist, dann sollten Sie in der Lage sein, flock() zu erlauben, aber ich bin nicht sicher, wie man das macht. This kann Ihnen helfen, wenn es ist NFS

Ich würde sicherlich interessiert sein zu hören, wie Sie sich verstanden?

Verwandte Themen