2017-01-12 9 views
0

Итак, я создал файловую систему запаса, которая использует txt-файлы для хранения данных. Когда уровень запаса падает ниже определенного значения, я хочу вставить эти продукты в отдельный файл txt. Всякий раз, когда я это делаю, файл имеет только данные последнего продукта, так как каждый раз, когда цикл запускает данные следующего продукта, он перезаписывает данные предыдущего продукта.Txt Строки файла переписывают друг друга при использовании для цикла

EDIT: Я, вероятно, следует отметить, что я использовал словарь в качестве soource данных, которая является то, что каждое значение, таких как SLref присваивается

Вот код:

with open("Under the Reorder Level.txt", "r+") as u: 
      for item in restockItem: 
       while count < len(restockItem): 

        u.write(gtin) 
        u.write(' ') 

        product = str(restockItem[count]) 
        u.write(product) 
        u.write(' ') 

        SLref = restockItemStock[count] 
        stocklevel = str(restockItemStock[count])) 
        u.write(stocklevel) 
        u.write(' ') 

        RLref = restockItemReorder[count] 
        reorderlevel = str(restockItemReorder[count]) 
        u.write(reorderlevel) 
        u.write(' ') 

        TLref = restockItemTarget[count] 
        targetlevel = str(restockItemTarget[count]) 
        u.write(targetlevel) 

        u.write(' ') 
        u.write('£') 
        u.write(' ') 

        Pref = restockItemPrice[count] 
        price = str(restockItemPrice[count]) 
        u.write(price) 

        u.write('\n') 

        count = count + 1 
        print (count) 
       u.close() 

выход в текстовый файл читает:

"09876545 Билеты 6 10 50 100 £"

Когда следует читать:

"12345670 расческа 17 10 50 £ 1

10101018 фоторамке 11 10 50 15 £

09876545 Билеты 6 10 50 100 £"

EDIT NO.2: Каждый раз, когда код запускается, возможно, что он будет отличаться уровни запасов, либо с некоторыми новыми элементами под уровнем запасов, либо с элементами, которые больше не находятся на уровне запасов. Если эти элементы больше не находятся под уровнем запасов, я не хочу, чтобы они были записаны в этот файл. Поэтому я хотел бы, чтобы файл был очищен каждый раз, прежде чем писать на него. Элементы, находящиеся под уровнем запаса, обнаруживаются непосредственно перед этим блоком кода и затем помещаются в список, называемый «RestockItem», который используется выше. Я понимаю различные способы, которыми вы можете открыть файл, я просто не уверен, что я сейчас делаю неправильно. Моя предыдущая ошибка была исправлена, однако я не могу получить правильный вывод, когда я очищаю файл перед использованием этого цикла.

open("Under the Reorder Level.txt", 'w+').close() 
     with open("Under the Reorder Level.txt", "a+") as u: 
      for item in restockItem: 
       while count < len(restockItem): 

        u.write(gtin) 
        u.write(' ')open("Under the Reorder Level.txt", 'w+').close() 
     with open("Under the Reorder Level.txt", "a+") as u: 
      for item in restockItem: 
       while count < len(restockItem): 

        u.write(gtin) 
        u.write(' ') 
#carries on....... 
+0

Мое предположение, что данные не записываются в файл. Если вы используете 'with open', вам не нужно закрывать файл, вызывая' close() '. Трудно предсказать, когда файл открыт и закрыт, скорее всего, корень проблемы есть –

+0

Ой хорошо, спасибо за это. И я вижу, что это написано, но по какой-то причине записывается только одна строка, когда я использую эту новую строку кода ... или, может быть, каждая строка снова перезаписывается? – AntsOfTheSky

+1

Мне очень жаль, что я потратил впустую ваше время, но я понял это! Я положил эту новую строку в неправильное место или что-то, потому что я ее переместил, и это сработало. Спасибо за вашу помощь, очень цените это! – AntsOfTheSky

ответ

1

Изменить флаг, чтобы открыть файл из r+ в a+. что означает запись и чтение с конца файла.

Here is a difference between them explained on SO

Если вы хотите полностью перезаписать файл, то вы можете использовать «ш» опции для записи. Here is a list of flags explained

+0

Я бы хотел этот файл переписываться каждый раз, когда программа запускается, поэтому, если данные запаса изменились, этот файл будет обновлен, будет ли это работать, или он всегда будет иметь только данные, добавленные к нему? – AntsOfTheSky

+0

Я вижу, что это только добавляет к тому, что было раньше. Есть ли способ/строка кода, которая очистит содержимое файла, которое я мог бы поставить перед этим битом кода? – AntsOfTheSky

+0

Я использовал строку «open (« Под Reorder Level.txt »,« w + »). Close()» перед фрагментом кода, описанным выше, и на выходе отображается только один из желаемых продуктов, например, в последний раз, но когда Я не использую эту новейшую строку кода, метод отлично работает ...? – AntsOfTheSky