2013-08-01 55 views
1

我想我知道一種方法來做到這一點,但我想看看是否有更好的方法。因此,這裏是只是其中的一部分,我試圖讀(和寫回)將多個版本的BOM(零件清單)保存到Python中的文件中

['Part assembly name', <name of assembled part>] 
['Parts', <part1>, <part2>, <part3>] 
['Quantities', 5, 8, 2] 
['Part category, <category type 1>, <category type 2>] 

如果我每一行保存到一個數組中的文件,我可以寫每一個與JSON

myfile = file('partsList.txt', 'w') 
for x in (names, ingedients, volumes, category): 
    json.dump(x, myfile) 
    myfile.write('\n') 

我應該能夠讀取每一行回來了:那麼讀我的所有不同的部分組件從我的文件,我應該有四個陣列(或者1個2維數組)後

with open(fname) as f: 
    names.append(f.readlines()) 
    parts.append(f.readlines()) 
    quanties.append(f.readlines()) 
    categories.append(f.readlines()) 

names = [<name of assembly 1>, <name of assembly 2>, <name of assembly 3>] 
parts = [<array of parts for 1>, <array of parts for 2>, <array of parts for 3>] 
quantites = [<array of quantites for 1>, <array of quantites for 2>, <array of quantites for 3>] 
categories= [<array of categoriesfor 1>, <array of categoriesfor 2>, <array of categoriesfor 3>] 

有沒有更好/更簡單的方法來做到這一點?我不想嘗試重新發明輪子。謝謝!

+0

對我來說,這永遠是解決問題的關鍵部分 - 數據結構。正如@Martijun所建議的 - 使用字典 - 你可能需要一本字典詞典,外部字典的關鍵是程序集的名稱,而且該值具有部件,數量等關鍵字,值就是那些東西。 – PyNEwbie

+0

很好的電話詞典詞典。我認爲那樣會很好。謝謝一堆! – gerrgheiser

回答

1

使用字典,然後進行編碼並寫入一次,讀取和解碼一次:獨立

with file('partsList.txt') as myfile: 
    data = json.load(myfile) 

names = data['names'] 
# etc. 

或者更好的是,先從字典來代替:

with file('partsList.txt', 'w') as myfile: 
    data = {'names': names, 'ingredients': ingredients, 'volumes': volumes, 'category': category} 
    json.dump(data, myfile) 

閱讀首先是變量。

+0

我按照建議使用字典開始。問題是,有沒有辦法讓我轉儲數據的文件能夠讀取多個不同的部分集?就像現在一樣,一切都只在一條線上。我試圖做一個漂亮的打印文件,但我不認爲我正確使用它。正如@PyNEwbie建議的那樣,我正在使用字典詞典。 – gerrgheiser

+0

@gerrgheiser:默認情況下,'json.dump()'使用不帶換行符的緊湊格式。請參閱[文檔](http://docs.python.org/2/library/json.html#json.dump)中的indent和separator關鍵字參數,使其輸出更具可讀性的內容。 –

+0

@gerrgheiser:但是,如果您將其作爲每行一個JSON對象,則可以編寫多個條目(其間有換行符),然後再次將每行一行的數據讀入新的JSON對象。請參閱[在python中加載和解析JSON文件](http://stackoverflow.com/a/12451465),以獲取再次閱讀它們的技巧。 –

相關問題