2017-06-17 47 views
2

我有這樣的代碼:Python的海報寫在txt文件的同一行

def export_devices(): 
     code = input("Enter device code: ") 
     amount = int(input("How many devices you export: ")) 
     with open("uredjaji.txt", "r+") as f: 
      current_position = 0 
      line = f.readline() 
      while line: 
       if line[:len(code) + 1] == code + ":": 
        line = line.rstrip() 
        amount_index = line.rfind(":") + 1 
        current_amount = int(line[amount_index:])   
        if amount > current_amount: 
         print("There no that many devices in stock...") 
         return 
        remaining_content = f.read() 
        f.seek(current_position) 
        f.truncate() 
        line = line[:amount_index] + str(current_amount - amount) + "\n" 
        f.write(line) 
        f.write(remaining_content) 
        return 
       current_position = f.tell() 
       line = f.readline() 
       with open('transakcije.txt','a') as transactions: 
        date = datetime.date.today().strftime('%d.%m.%Y.') 
        transactions.write("1" + ":" + str(amount) + ":" + "export" + ":" + str(date) + ":" + "username" + "\n") 
     print("Error device code: {}".format(code)) 

現在,我想我的「transakcije.txt」看起來是這樣的:

1:3:iznos:17.06.2017.:username 

但總是追加同一行三次。有了任何其他類型的縮進,它都不會被追加。

而且,我uredjaji.txt文件看起來像這樣:

tw004:Galaxy S5:Samsung:Mobilni telefon:3 
tw002:Galaxy S6:Samsung:Mobilni telefon:1 
tw001:Huawei P8:Huawei:Mobilni telefon:1 
tw003:Huawei P9:Huawei:Mobilni telefon:100998 

PS:「用戶名」應該是從另一個函數的變量,因此,如果有人可以幫助我如何寫這個文件中我將這個變量非常感謝。 :)

+0

你能解釋你想要做什麼嗎?你的代碼很難遵循。 – Joshua

+0

你能發佈你當前的輸出文本文件嗎?這將幫助我們驗證問題。 –

+0

我transakcije.txt文件現在看起來是這樣的: '1:3:iznos:2017年6月17日:用戶名 1:3:iznos:2017年6月17日:用戶名 1:3:iznos:2017年6月17日。 :用戶名' 而我試圖只寫一行永遠使用此功能。 –

回答

0

當您打開文件時,您讀取一行,然後進入while循環的存在line。如果輸入代碼沒有匹配,那麼我試圖用f.tell()重新定位文件指針,但是你不要去尋找。之後,您再次讀取文件並寫入transakcije.txt。可悲的是,原來的while循環仍在使用中,因此您將多次寫入transakcije.txt
目前還不清楚你用這段代碼試圖實現什麼,但你需要坐下來重新思考它從頭開始。
如果是某種股票報告/補貨例程,我不禁想到一個數據庫(sqlite3作爲一個簡單的啓動器)將ascii文件拉開比較合適。

相關問題