2013-08-22 21 views
0

我在這裏遇到了一些麻煩。我有一個帶有["Data1", "Data2", "Data3"]的文本文件,如果data1不在文件中,然後附加一個包含所有三個字符串的新列表,並且如果數據已經存在,那麼就打印它,然後我想將其作爲。這段代碼破了什麼?爲什麼?如何在Python上使用JSON將列表附加到文件中

filename = "datosdeusuario.txt" 
leyendo = open(filename, 'r') 
if user.name in leyendo: 
    Print("Your user name is already there") 
else: 
    file = open(filename, 'a') 
    file.write(json.dumps([user.name, "data2", "data3"])+"\n") 
    file.close() 
    Print("Since I couldn't find it, I did append your name and data.") 

P.S .:我是一名Python新手,經常感到困惑。這就是爲什麼我不使用任何字典(不知道它們是什麼),所以我想以最簡單的方式使代碼工作。 P.2:另外,如果這樣做,我的下一步就是讓搜索引擎返回列表中三個數據項中的一個。例如,如果我想要在用戶名「sael」的列表中獲取data2,我需要做什麼?

+0

定義了user.name? 「Print」功能有什麼作用? (你的意思是內置函數'print'?大寫是重要的。)你是否收到錯誤信息,或者程序正在運行,但沒有按照你期望的方式運行? – Kevin

+0

lazyy001給出了一個很好的答案,現在我在第二部分的問題。我如何從文件中獲取特定數據? user.name信息並非真正需要理解此代碼,而是內置於我正在使用的庫中。另外通過打印,我的意思是內置功能。對大寫問題抱歉:P – Saelyth

回答

1

看來你是從文件指針讀取,而不是從文件中的數據與您預期。

所以,你首先需要在文件中讀取數據:

buffer = leyendo.read() 

然後以此爲基礎buffer你的支票,不leyendo

if user.name in buffer: 

此外,你打開文件兩次,這可能是一種昂貴的。我不確定Python是否有讀取和寫入模式下打開文件的功能。

+0

事實上,這是失敗的,謝謝你的答案。另外python得到了一個模式R +同時閱讀和寫入,似乎是一個很好的選擇,但我不知道是否會工作。 – Saelyth

1

假設您的user.name和您的Print函數正在工作,您需要讀取該文件並關閉該文件。

試試這個:

filename = "datosdeusuario.txt" 
f = open(filename, 'r') 
leyendo = f.read() 
f.close() 
if user.name in leyendo: 
    Print("Your user name is already there") 
else: 
    file = open(filename, 'a') 
    file.write(json.dumps([user.name, "data2", "data3"])+"\n") 
    file.close() 
    Print("Since I couldn't find it, I did append your name and data.") 
+0

到目前爲止工作。呃...有時候工作哈哈。假設在聊天中從每條消息中獲取信息,到目前爲止,只有90%的消息可以獲得。一些消息被忽略,它不會保存任何內容。可能是因爲它需要一些時間來關閉和打開文件或可能是其他東西?我只用這段代碼遇到麻煩。而不使用模塊JSON它獲得100%的消息。 – Saelyth

+0

您可以顯示代碼嗎?如果需要,可以創建其他主題。 – lazyy001

+0

當然,對於延遲抱歉。這裏是鏈接:http://stackoverflow.com/questions/18391165/how-to-retrieve-specific-string-from-specific-list-from-a-file-with-json-in-pyth – Saelyth

1

首先,你應該關閉該文件在這兩種情況下,我想你,然後再重新打開它應該關閉該文件進行追加。

我認爲這個問題是與線:

if user.name in leyendo: 

這將始終返回false。

你應該閱讀該文件,然後質疑它像這樣:

if user.name in leyendo.read(): 
+0

的確,那失敗了,謝謝你的回答。 – Saelyth

相關問題