#python
#python
Вопрос:
как мне выбрать элемент из определенного текстового файла. а затем количество элемента уменьшается и текстовый файл обновляется .
Я пробовал этот код.
def listingproductsbought(self):
txtfile=open('user.txt','r')
текстовый файл, например, выглядит следующим образом:
--------------------------------
|ItemID|itemName|Quantity|Price|
|------|--------|--------|-----|
|P1 |Dior |441 |24 |
|------|--------|--------|-----|
|P2 |Elie |411 |30 |
|------|--------|--------|-----|
|P3 |Gucci |415 |41 |
|------|--------|--------|-----|
|P4 |Armani |310 |20 |
|------|--------|--------|-----|
|P5 |Hermes |805 |23 |
|------|--------|--------|-----|
|P6 |Hugo |300 |32 |
|------|--------|--------|-----|
|P7 |Givenchy|490 |51 |
|------|--------|--------|-----|
|P8 |Byredo |900 |13 |
|------|--------|--------|-----|
|P9 |Bvlgari |550 |42 |
|------|--------|--------|-----|
|P10 |Versace |649 |43 |
--------------------------------
Я хочу выбрать продукт, и когда я это сделаю, количество товара (количество) уменьшится.
Исходное содержимое файла выглядит следующим образом (в соответствии с оригинальным ответом на вопрос):
ItemID itemName Quantity Price
P1 Dior 441 24
P2 Elie 411 30
P3 Gucci 415 41
P4 Armani 310 20
P5 Hermes 805 23
P6 Hugo 300 32
P7 Givenchy 490 51
P8 Byredo 900 13
P9 Bvlgari 550 42
P10 Versace 649 43
Комментарии:
1. что вы имеете в виду под количеством? Какие «элементы» есть в текстовом файле?
2. количество доступных товаров, например, их 23, доступных для покупки в магазине
3. скопируйте и вставьте образец текста здесь. Укажите, что именно вы хотите «уменьшить» из него.
4. ItemId ItemName Количество Цена P1 Dior 441 24 P2 Elie 411 30 P3 Gucci 415 41 P4 Armani 310 20 P5 Hermes 805 23 P6 Hugo 300 32 P7 Givenchy 490 51 P8 Byredo 900 13 P9 Bvlgari 550 42 P10 Versace 649 43.
5. @user14517676 — stack overflow настоятельно рекомендует добавлять поясняющий текст к вопросу, а не комментарии.
Ответ №1:
Использование простого кода Python (т. Е. Без внешних библиотек)
Код
def decrement_item(item_id, quantity):
'''
Decrement Quantity field based upon item_id
inventory - file
item_id - item id to update
quantity - quantity to reduce by
'''
with open(inventory, 'r') as fin:
# indexes for id and quantity
index_id = 0
index_quantity = 2
# output buffer
output = []
# Add headaer to output buffer
header = fin.readline().rstrip()
output.append(header) # header without 'n' at end of line
bfound_item = False
for line in fin:
# Check each line for item_id then upadte quantity
line = line.rstrip()
if not bfound_item:
# Only process if item_id has not been found yet
# Break line into separate fields
row = line.split()
current_id = row[index_id]
if current_id == item_id:
# Found item
# Check if sufficiente quantity
current_quantity = int(row[index_quantity])
if current_quantity >= quantity:
# Decrement quantity
current_quantity -= quantity
row[index_quantity] = str(current_quantity)
line = ' '.join(row)
bfound_item = True
else:
# Insufficient quantity for update
s = f"Sorry, available quantity is only {int(row[index_quantity])}"
raise Exception(s)
# Add line to output
output.append(line) # add copy since row changes with loop
# Update inventory file
with open(inventory, 'w') as fout:
for line in output:
fout.write(line 'n')
Тест
Продолжайте уменьшать количество в p4 на 100, пока не будет недостаточно
while True:
try:
# keep updating quantity in P4 for
# file inventory.txt until insufficient
# amount remaining
decrement_item("inventory.txt", "P4", 100) # reduce P4 by 100
# show updated inventory
with open('inventory.txt', 'r') as fin:
print('Contents of file inventory.txt')
print(fin.read())
except Exception as e:
# Could not update
print(e)
break # Error during update
Вывод теста
Contents of file inventory.txt
itemID itemName Quantity Price
P1 Dior 441 24
P2 Elie 411 30
P3 Gucci 415 41
P4 Armani 210 20
P5 Hermes 805 23
P6 Hugo 300 32
P7 Givenchy 490 51
P8 Byredo 900 13
P9 Bvlgari 550 42
P10 Versace 649 43
Contents of file inventory.txt
itemID itemName Quantity Price
P1 Dior 441 24
P2 Elie 411 30
P3 Gucci 415 41
P4 Armani 110 20
P5 Hermes 805 23
P6 Hugo 300 32
P7 Givenchy 490 51
P8 Byredo 900 13
P9 Bvlgari 550 42
P10 Versace 649 43
Contents of file inventory.txt
itemID itemName Quantity Price
P1 Dior 441 24
P2 Elie 411 30
P3 Gucci 415 41
P4 Armani 10 20
P5 Hermes 805 23
P6 Hugo 300 32
P7 Givenchy 490 51
P8 Byredo 900 13
P9 Bvlgari 550 42
P10 Versace 649 43
Sorry, available quantity is only 10