从CSV读取,更新值然后重写

时间:2016-06-27 13:03:27

标签: python-3.x csv

我正在尝试从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 ")

1 个答案:

答案 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