2015-11-02 25 views
1

我正在使用astropy.table.write(filename,path = run_dir)將一個astropy表寫入名爲dat.h5的文件。但是我收到文件存在的錯誤,我在下面用pdb跟蹤顯示它沒有。到底是怎麼回事?astropy.table.write()IOError:文件存在:

(Pdb) run_dir 
'/Users/ms/run0' 

(Pdb) os.system("ls " + run_dir) 
param.txt temp_in.dat temp_out.dat 
0 

(Pdb) os.path.exists(run_dir + '/dat.h5') 
False 

(Pdb) dat_cube.write('dat.h5', format='hdf5', path=run_dir) 
*** IOError: File exists: dat.h5 

回答

2

path變量,就是要內的HDF5文件的路徑(見http://docs.astropy.org/en/stable/api/astropy.io.misc.hdf5.write_table_hdf5.html#astropy.io.misc.hdf5.write_table_hdf5;您可以在該路徑變量不用於exists檢查source看到)。這不是文件系統路徑,因此您的os.path.exists檢查似乎看錯了位置。因此,(1)檢查os.getcwd,看看dat.h5是否存在,以及(2)嘗試dat_cube.write(os.path.join(runpath, 'dat.h5'), format='hdf5', path="mypath")

+0

我確實看到'dat.h5'存在於cwd中。使用os.path.join但忽略path =仍然會產生相同的錯誤。應該「runpath」和「mypath」是什麼。應該「runpath」是順時針嗎?和「mypath」我想要寫文件的地方? – astromonerd

+1

mypath是* not *文件路徑,它是hdf5文件中的內部路徑(或者至少,這就是我讀取它的方式)。在這種情況下,'runpath'應該是'cwd' – keflavich

+1

對。由於該名稱的文件已經存在於當前的工作目錄中,因此您正確地獲取錯誤,這是您在任何時候只給文件名寫入的內容。要覆蓋它,請使用overwrite = True選項來寫入()。要寫入其他地方,請使用write(os.path.join(path,filename))。 – Iguananaut