【问题标题】:How do I search for a specific field in a csv file then print the entire row in Python如何在 csv 文件中搜索特定字段,然后在 Python 中打印整行
【发布时间】:2016-05-01 01:06:57
【问题描述】:

我会包含我的整个程序,但它太长了,所以我将提供一个示例:

假设我有这个 csv 文件:

John, 23, 1944, Africa
Fred, 45, 1922, China
Bob, 23, 1999, Japan

如何搜索文件并打印 1944 所在的行? 基本上我想要它做的是找到 1944,然后打印 1944 所在的整行。

另外,如果它的结构类似于

Name, Age, Year, Nation
John, 23, 1944, Africa
Fred, 45, 1922, China
Bob, 23, 1999, Japan

您将如何打印找到的行以及顶行?

非常感谢。

编辑: 为什么需要反对投票?我合法地找不到这方面的任何信息。所以我不得不问。

【问题讨论】:

  • Python 有一个 csv 模块用于解析 CSV 文件。该文档包括示例,并且在线上有很多该模块的示例(包括 SO 上的其他地方)。向我们展示您迄今为止所做的尝试,并让我们知道文档不清楚的地方或您不了解代码行为的地方。
  • 我已经搜索了我想要做的事情,但绝对没有成功。据我了解,我不知道该怎么做。我目前正在成功使用 csv 模块,例如我的程序可以附加给定输入的列表,找到给定的 x,y 坐标,但我不知道如何让它搜索用户输入的值,然后打印整行。

标签: python python-2.7 csv


【解决方案1】:

这个程序回答了你的第一个问题:

import csv
import sys

with open('csv1.txt') as fp:
    reader = csv.reader(fp, skipinitialspace=True)
    writer = csv.writer(sys.stdout)
    writer.writerows(row for row in reader if row[2] == '1944')

这回答了你的第二个问题:

import csv
import sys

with open('csv2.txt') as fp:
    top_row = next(fp)
    sys.stdout.write(top_row)
    reader = csv.reader(fp, skipinitialspace=True)
    writer = csv.writer(sys.stdout)
    writer.writerows(row for row in reader if row[2] == '1944')

【讨论】:

  • 出于好奇,简单来说,skipinitialspace 和 sys.stdout 是做什么的?
  • 嗨 Rob,我正在尽我所能来完成这项工作,但是似乎没有任何输出可以使用它进行打印。此外,如果我只想搜索并打印行,而不是更改任何内容,为什么还要使用 writer 功能?我有点糊涂了,抱歉。
  • 我正在使用 writer 函数来打印行。该代码根本不会改变磁盘文件。
  • 哦,好的,它现在可以工作了。唯一的问题是它打印顶行,而不是找到“1944”的行?
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2015-09-11
  • 2017-02-14
  • 2020-05-18
  • 1970-01-01
相关资源
最近更新 更多