【问题标题】:Python write to csv, once checked whether a string is in a csvPython写入csv,一旦检查字符串是否在csv中
【发布时间】:2015-07-06 19:11:44
【问题描述】:

目前,我有

导入的 csv

并为用户输入一个注册变量。我还有一个名为

的 CSV 文件

"已知文件 reg 和 names.csv"

我将其称为“文档”,其中包含姓名、地址和注册信息;如此处所示:

Bob Job GH58JBL 9, Henderson lane
Dan strobe  WK15HYO 12, Dominic Road
Alex Nail   VA11ZWU 6, Yake lane
Sam Jones   WX63GKP 273, Soomy Avenue
John English    WK64HRK 67, Wane Close

我有一个程序,它检测一个输入的注册是否在一个叫做注册的变量中;与文档中的注册信息匹配。

import csv
registation=str(input("Please enter you registation plate."))
with open('Known file reg and names.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        for field in row:
            if field == registation:
                print("We have found your reg in our database")

当输入与文档中匹配的注册时,这将导致程序输出“我们已在我们的数据库中找到您的注册”。

然后我有另一段代码“应该”将程序中的注册变量和文档中的匹配信息写入另一个包含特定人员详细信息的 csv 文件。

with open("saved database.csv", "w", newline="") as csvfile:
    w = csv.writer(csvfile)
    w.writerow([registation])
    w.writerow([field])

所以如果我输入“WK15HYO”,程序应该比较文档中的信息和输入的注册变量,并重写应该是的人信息

WK15HYO Dan strobe, 12, Dominic Road

但是,情况并非如此,而是发生了程序编写

67,Wane Close` 和 WK15HYO

。它不是写 12, Dominic road 和 Dan strobe。 请给我一些关于我做错了什么以及如何解决问题的见解。

【问题讨论】:

  • 您应该在找到记录后停止迭代。打印找到记录后继续,因此字段仅代表文件中字段的最后一个值。
  • 那么我该如何解决这个问题呢?很抱歉造成混乱。
  • 你需要 break 退出你的 for 循环。因为你有两个,你需要在内部做一些事情(比如设置一个变量),外部也可以检查和中断。您可以尝试并发布更新的代码,或者我相信有人会尽快将我的评论变成答案。
  • 你能举个例子吗?

标签: python string csv compare


【解决方案1】:

好的,有几件事。首先,您似乎完全没有必要遍历每一行中的字段。如果注册总是第二件事,您可以在row[1] 寻找注册。当您将field 写入您的csv 文件时,您写入了分配给变量“field”的最后一个内容,在本例中是csv 最后一行中的最后一个条目67, Wane Close。下面的代码将专门搜索索引 1 处的注册,将完整信息保存为user_info(或您选择的任何名称),然后结束您的迭代。

import csv
registation=str(input("Please enter you registation plate."))
with open('Known file reg and names.csv', 'rt') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        if row[1] == registration:
            user_info = row
            break

当您打印此内容时,您现在有一些选择。您想按姓名、注册、地址的顺序将所有信息打印到一行吗?然后你可以简单地使用:

with open("saved database.csv", "w", newline="") as csvfile:
    w = csv.writer(csvfile)
    w.writerow(user_info)

如果你想做其他事情,那么你可以通过按你想要的顺序编写每个组件来轻松地做到这一点。这个人的名字应该是user_info[0],他们的注册是user_info[1],他们的地址是user_info[2]

【讨论】:

  • 谢谢!正是我需要的。干杯
  • 很高兴它成功了。如果你有你需要的,你应该将问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 2022-08-23
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2020-08-20
  • 2020-10-27
  • 2017-03-05
相关资源
最近更新 更多