2012-04-17 62 views
0

我想將我的字典寫入文件,並且已經知道必須將其更改爲字符串。但是,有沒有辦法在最後添加'\ n'以保持我的文件的組織?在我的字典的末尾添加' n'時,將其寫入文件

代碼如下:

def dictionary(grocerystock): 

    with open('grocery_stock.txt','r+') as f: 
     lines = f.readlines() 

# filter out empty lines 
    lines = [line for line in lines if line.strip() != ''] 

# split all lines 
    lines = [line.split() for line in lines] 

# convert to a dictionary 
    grocerystock = dict((a, (b, c)) for a, b, c in lines) 

# print 
    for k, v in grocerystock.items(): 
     print (k, v) 

    grocerystock=str(grocerystock) 


    grocerystock=grocerystock.replace("{",'') 
    grocerystock=grocerystock.replace("}",'') 
    grocerystock=grocerystock.replace("(",'') 
    grocerystock=grocerystock.replace(")",'') 
    grocerystock=grocerystock.lstrip() 
    grocerystock=grocerystock.rstrip() 
    grocerystock=grocerystock.strip() 
    grocerystock=grocerystock.replace(":",'') 
    c=(grocerystock+("\n")) 


    e=open('grocery_stock.txt', 'w+') 

    e.write(c) 
    e.close() 

任何幫助,將不勝感激。

+1

'c =(grocerystock +(「\ n」))'是什麼問題,'你沒有得到預期的換行符? – cmh 2012-04-17 00:26:15

+0

1.這個作業嗎? 2.是否有輸出文件必須查看的特定方式?如果是這樣,你應該舉個例子。 – 2012-04-17 00:33:14

+0

給我們一個輸出結果的例子。 – 2012-04-17 01:59:29

回答

6

如果您的目的是簡單地將dict保存到一個文件,你可以簡單地使用pickle,但是,考慮到你對可讀性的關注,我會想你想它的人類可讀的 - 在這種情況下,你可能要考慮JSON

import json 

with open('grocery_stock.txt', 'r') as file: 
    grocery_stock = json.load(file) 

... 

with open('grocery_stock.txt', 'w') as file: 
    json.dump(grocery_stock, file, indent=4) 

這將產生JSON輸出,類似於Python的文字:

{ 
    "title": "Sample Konfabulator Widget", 
    "name": "main_window", 
    "width": 500, 
    "height": 500 
} 

當然,結構爲您的數據。

使用其中一個模塊意味着您不需要將自己的序列化/反序列化到/從文件中。當然,如果您覺得自己必須自己推出自己的產品,例如,如果其他產品(您無法控制)期望採用此格式,則可以簡單地將換行符連接到字符串當你將它寫入文件時,就像你所做的那樣。這是否按預期工作?

編輯:

,你希望你的現有代碼不工作的原因是,你正在轉向整個字典爲一個字符串,然後在最後加入一個換行符 - 這不會解決你的問題,你想在每一行的末尾換行。如果您做手工,最好的辦法是遍歷你的字典,編寫項目根據需要進行:

with open('grocery_stock.txt', 'w') as file: 
    for key, value in grocery_stock.items(): 
     file.write(key+" "+value+"\n") 

這會寫的每行以空格分隔的鍵和值。你可能需要改變它來適應字典的數據結構和你想要的輸出格式。

另外值得一提的你的閱讀是一種迂迴的方式完成,可以考慮:

with open('grocery_stock.txt','r') as file: 
    grocery_stock = {key: value for key, *value in (line.split() for line in file if line.strip())} 

正如我在一開始卻指出,記住這是連載您的數據的脆弱的方式,並重新發明輪子 - 除非你不能控制的其他東西需要這種格式,請使用標準格式並節省您的努力。

+0

我確定它確實工作我只是從來沒有使用json所以不完全確定我應該把這個代碼。不管感謝您抽出時間來幫助我。 – bradb 2012-04-17 01:16:02

+1

@bradb:您應該將該代碼放入您的程序中,作爲您現在打印的替代品。 – 2012-04-17 08:06:34