在列表中的同一变量中存储多个值

时间:2017-05-08 16:29:39

标签: python csv

我目前正在尝试通过python将图书ID值存储到CSV文件中。使用从1000到9999的while循环,随机生成4个数字的book id 5次。我想要做的是将所有book id保存到CSV文件中。但是,只有最新值会保存到CSV文件中,并且之前的书籍ID值会被覆盖。如果得到任何帮助,我将不胜感激。

这些是我的代码。

import random
import csv

def generatebookid():
    global book_id

    count =0
    while (count<5):

        book_id = random.randint(1000,9999)
        print (book_id)

        count+=1

def savecsv():

    booklist = []
    booklist.append(book_id)

    csvfile ='C:\\Users\\dell\\Desktop\\MPbookid.csv'

    with open (csvfile, "a") as output:
        fieldnames = ['Book ID']
        writer = csv.writer(output, delimiter =',', lineterminator ="\n")

        writer.writerows([fieldnames])
        writer.writerows([booklist])

generatebookid()
savecsv()

这是我在excel中打开CSV文件时得到的输出。我应该得到5个值,但只保存最新的书ID值。  csv

1 个答案:

答案 0 :(得分:1)

import random
import csv

def generatebookid():
    book_id = []
    count =0
    while (count<5):

        book_id.append(random.randint(1000,9999))

        count+=1
    return book_id

def savecsv():

    booklist = []
    for _ in range(5):
        booklist.append(generatebookid())

    csvfile =r"path\to\my\directory\sometext.csv"

    with open (csvfile, "a") as output:
        fieldnames = ['Book ID']
        writer = csv.writer(output, delimiter =',', lineterminator ="\n")

        writer.writerows([fieldnames])
        for books in booklist:
            writer.writerows([books])

generatebookid()
savecsv()

所以你的generatebookid程序只是将book_id设置为一次随机int。为了从booklist.append()获得你想要的行为,你需要某种循环来多次调用generatebookid。或者(以及我所做的)生成一个书籍ID列表,然后将其返回到书目列表。这将按照您的预期编写一整行5个ID。

P.S他们没有被覆盖,它处于追加模式

编辑:更改它以将5个不同的图书ID列表写入文件。添加了for _ in range(5)以表示文件条目的数量,并使用for books in booklist进行了迭代。