【问题标题】:Python - Edit specific cell in CSV filePython - 编辑 CSV 文件中的特定单元格
【发布时间】:2019-01-25 00:53:23
【问题描述】:

我用 Python 创建了一个问答游戏,其中还包含一个登录和注册程序,但我正在尝试添加一个评分系统。

目前,我的 CSV 文件格式如下:

username,password,score

当您创建帐户时,分数设置为 0,并在您使用以下方式登录时加载:

for row in users:
     if username == row[0]:
         currentScore = row[2]
         currentScore = int((currentScore))

这会从 CSV 文件中获取用户的高分。 然而,当一场比赛结束时,我有这个设置来确定他们的新分数是否高于旧分数:

if int(score) > int(currentScore):
    currentscore = score

然后我需要它来打开数据库并找到正在玩的用户并用新的用户更新那里的分数。我该怎么做?我试图让 csv 编辑某一行,但它似乎不起作用。

完整代码可以在这里找到:https://pastebin.com/q07qazJA

【问题讨论】:

  • then need it to open the database,那会是哪个数据库? csv 不是数据库,为什么不直接使用sqlite,因为它包含在标准库中。会让你的生活轻松很多。
  • 我不想处理 sql 使用 .json 文件。您可以将数据视为 dict 而无需遍历所有数据。字典经过哈希处理,以便于查找,否则我建议使用 pandas 让您的 csv 文件更轻松。
  • 为什么不使用 pandas 呢?这真是一个很棒的包。
  • Pandas 是一个非常棒的软件包,但它的开销很大。从效率的角度来看,仅使用它来读取/写入 csv 文件是不明智的。记住那句话:如果你唯一的工具是锤子,那么每个问题看起来都像钉子

标签: python python-3.x csv


【解决方案1】:

TL;DR

if int(score) > int(currentScore):
    currentscore = score

    r = csv.reader(open('users.csv'))
    lines = list(r)
    for n, line in enumerate(lines):
        if [username, password] == list(line):
            break
    lines[n] = username, password, score

    writer = csv.writer(open('users.csv', 'w'))
    writer.writerows(lines)

quiz = False

说明:编辑一行需要分两步完成,因为读取和写入文件的同一行是不切实际的,所以首先打开csv文件,读取数据并将其保存到列表中,编辑列表,然后再次打开文件将编辑后的列表写回csv

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多