我正在尝试从csv文件中读取,然后根据用户选择更新字段,并将内容(包括修订)写入新的csv文件。我已经管理了一切,但我的解决方案只写了修改的行而不是其余的文件内容。
csv文件如下所示:
1001, item1, 0.5, 10
1002, item2, 1.5, 20
以下是我的尝试示例:
run="yes"
while run=="yes":
id=input("Enter the id of the product you want to order: ")
amount=input("Enter the quantity: ")
reader = csv.reader(open('items.csv', 'r'))
writer = csv.writer(open('updatedstock.csv','w'))
for row in reader:
if id==row[0]:
name=row[1]
price=row[2]
stock=row[3]
newstock=int(stock)-int(amount)
writer.writerow([id, name, price, newstock])
run=input("Do you want to order another item? yes/no ")
答案 0 :(得分:0)
如果您根据条件匹配ID,则您当前只会写入新文件:
if id==row[0]:
将其更改为始终写入行:
run="yes"
while run=="yes":
id=input("Enter the id of the product you want to order: ")
amount=input("Enter the quantity: ")
reader = csv.reader(open('items.csv', 'r'))
writer = csv.writer(open('updatedstock.csv','w'))
for row in reader:
if id==row[0]:
name=row[1]
price=row[2]
stock=row[3]
newstock=int(stock)-int(amount)
writer.writerow([id, name, price, newstock])
else:
writer.writerow(row)
run=input("Do you want to order another item? yes/no ")
但是,如果您计划替换多个值,则这可能非常低效,因为每次更改都会读入csv。最好读入你想要改变的所有值,然后通过csv,修改所需的条目。
更好的方法是使用像SQLite这样的其他数据结构,它们在查找和写入方面表现更好。当然,这不像文件系统中那样易于人类阅读。如果需要,您可以轻松地将sqlite数据库输出到.csv:Export from sqlite to csv using shell script。