【问题标题】:How do I print rows of a csv file that have a specific keyword in them如何打印包含特定关键字的 csv 文件的行
【发布时间】:2019-06-12 17:11:27
【问题描述】:

我正在尝试打开两个 csv 文件,一个带有数据 (minidata.csv),一个带有关键字 (minikeys.csv),然后在第一个文件中搜索第二个文件中的关键字,然后打印出这些行从第一个包含第二个关键字的第一个。希望这是有道理的。

我尝试将关键字文件 (minikeys.csv) 作为列表打开并从那里进行搜索,但由于某种原因,我通过将其打开到字典中来最接近成功。

with open('minidata.csv', 'r') as f:    
    text = f.read()
    csvFileArray = []

    with open('minikeys.csv', 'r') as inf:
        reader = csv.reader(inf)
        mydict = {rows[0] for rows in reader}

    for key in mydict:
        for row in text:
            if key in text:            
                print(row)

这将使它打印出 minidata.csv 文件中的每一行,而不是匹配的行,但它还会打印出每个字符的次数与 minikeys 中的字符一样多。所以它会给我这样的输出:

aaaa,,,,bbbb,,,,cccc,,,,dddd...

而不是打印出匹配的行。

我应该怎么做才能让它工作?

【问题讨论】:

  • mydict = {rows[0] for rows in reader} 应该是myset = {rows[0] for rows in reader}

标签: python csv


【解决方案1】:

代替

text = f.read()

text = f.readlines()

这里的问题是您将它作为一个包含换行符的大长字符串来阅读 - 而您希望将其作为行列表来阅读。本质上,f.readlines() 大致相当于f.read().split('\n')(不完全,但对于这个特定的比较来说足够相似)。因此,为什么您会看到您所做的输出 - 您正在迭代 每个字符,而不是 每行

更改text 使其最终成为一个字符串列表而不是一个字符串应该可以解决您的问题。


还有,小术语。你说mydict = {rows[0] for rows in reader}dict。不是 - 这是setdicts 专门用于键值对,而 sets 只是键。它们都被实现为哈希表。

【讨论】:

  • 这实际上根本停止给我输出。我在最后打印出集合和文本,并将其打印为一行: ['1,2,3,4\n', 'a,b,c,d\n', 'w,x, y,z']。当我将其保留为已读时,它会打印出 3 行:第一行是 1、2、3、4,第二行是 a、b、c、d,等等,但格式与我刚刚输入的完全一样。
猜你喜欢
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2017-09-24
  • 1970-01-01
相关资源
最近更新 更多