2016-09-21 5 views
-1

Я пытаюсь написать программу на Python для оценки, где мне нужно обновить файл запаса для магазина.Как заменить строку в Python

My instructions

Мой код до сих пор:

#open a file in read mode 
file = open("data.txt","r") 
#read each line of data to a vairble 
FileData = file.readlines() 
#close the file 
file.close() 

total = 0 #create the vairble total 
AnotherItem = "y" # create 
while AnotherItem == "y" or AnotherItem == "Y" or AnotherItem == "yes" or AnotherItem == "Yes" or AnotherItem == "YES": 
     print("please enter the barcode") 
     UsersItem=input() 
     for line in FileData: 
       #split the line in to first and second section 
       barcode = line.split(":")[0] 
       item = line.split(":")[1] 
       price = line.split(":")[2] 
       stock = line.split(":")[3] 

       if barcode==UsersItem: 
        file = open("data.txt","r") 
        #read each line of data to a vairble 
        FileData = file.readlines() 
        #close the file 
        file.close() 
        print(item +"  £" + str(float(price)/100) + "  Stock: " + str(stock)) 
        print("how many do you want to buy") 
        HowMany= input() 
        total+=float(price) * float(HowMany) 
        file = open("data.txt","a") 
        StockLevel=float(stock) 
        file.write(item + ":" + price + ":" +str(float((StockLevel-float(HowMany))))) 
        file.close() 
        print("Do you want to buy another item? [Yes/No]") 
        AnotherItem = input() 
     if AnotherItem == "n" or "N" or "no" or "No" or "NO": 
       print("total price: £"+ str(total/100)) 

Когда я пытаюсь обновить фондовый файл, он записывает в конец файла данных, а не на линии, я хочу его.

+1

Это не отвечает на ваш вопрос, но 'если AnotherItem ==«п»или«N»или" нет "или" Нет "или" НЕТ ":' также будет проблематичным (и заставить вас пойти «нет, нет, нет, нет, нет!»), поскольку он всегда будет работать, потому что даже если «AnotherItem ==» n " 'приведет к' False', '... или" N "' даст правдивое значение, например непустая строка. Вы хотите 'if AnotherItem в {" n "," N "," no "," No "," NO "}:', например. –

+1

Это потому, что вы открыли файл для добавления. Если это текстовый файл, вы можете только перезаписывать символы одинаковой длины, у него нет «записей» как таковых. Вам нужно будет написать строки в новый файл, замените нужную строку/строку, а затем переименуйте файл. – cdarke

+0

@cdarke Как бы переименовать файл? – Lightningz1

ответ

0
file = open("data.txt", "a") 

Открытие файла в режиме дописывания, означает запись в конец файла без перезаписи данных (добавление к нему, не меняя).

Использование

file = open("data.txt", "w") 

Вместо того, чтобы очистить содержимое файлов и переписать их.


Если у вас есть несколько строк, и вы хотите изменить только последнюю сделайте следующее:

data = open("data.txt").read().split("\n") 

получить массив из файла строк.

data[-1] = new_line_contents 

изменить последнюю строку на новое содержание.

open("data.txt", "w").write("\n".join(data)) 

обратной записи с промывкой новые данные (присоединиться элементы данных с новой строки между ними)