使用 Python 从 csv 文件中的字符串搜索中打印多列

Posted

技术标签:

【中文标题】使用 Python 从 csv 文件中的字符串搜索中打印多列【英文标题】:Print multiple columns from string search in csv file using Python 【发布时间】:2022-01-16 14:58:23 【问题描述】:

我有一个 csv 文件,下面的脚本搜索字符串“PROGRAM”并打印出该字符串所在列中的数据。虽然它只执行一次,但在其中找到了多个“PROGRAM”实例csv 文件,如何打印字符串出现的附加列?

import os
import csv
from pathlib import Path
from collections import defaultdict

search_str = "PROGRAM"

searchfile = open("Test_Process.csv", "r")
for line in searchfile:

index = line.find(search_str)
if (index != -1):
columns = defaultdict(list)
with open('Test_Process.csv') as f:
reader = csv.reader(f)
for row in reader:
for (i,v) in enumerate(row):
columns[i].append(v)
b=(columns[index])
for x in b[:]:
print (x)

【问题讨论】:

您需要修复代码中的缩进 【参考方案1】:

你真的应该只发布适当缩进的代码。

恕我直言,你不应该做什么:

str.find 不会为您提供 column 数字索引。它确实为您提供了第一次出现search_str 的索引(如果没有找到,则为-1)在搜索的字符串中(此处为line)。这不会导致您的程序出错,因为您使用的是defaultdict。 您的代码将 csv 文件多次加载到 dict 中 - 这不是很有效。

我建议你这样做:

import csv
from collections import defaultdict

# Reading csv-file columnwise into dict & identifying columns with search string
search_str = "PROGRAM"
relevant_columns = set()
with open("Test_Process.csv", "r") as file:
    reader = csv.reader(file)
    columns = defaultdict(list)
    for row in reader:
        for i, item in enumerate(row):
            columns[i].append(item)
            if search_str in item:
                relevant_columns.add(i)

# Printing the columns with search string
for col in sorted(relevant_columns):
    print(f"Printing items from column col:")
    for item in columns[col]:
        print(item)

评论:

第一个块将文件读入 dict,识别出现搜索字符串的列,并将它们收集到集合 relevant_columns。 第二个块打印结果,即带有搜索字符串的列。

【讨论】:

以上是关于使用 Python 从 csv 文件中的字符串搜索中打印多列的主要内容,如果未能解决你的问题,请参考以下文章

如何从csv文件中读取python中的数字?

在 Python 中从 csv 文件生成字符串集

Python 从 CSV 读取数据

python 从文本中提取每一行的特定字符串输出到csv文件

如何在目录中的所有 csvs 文件中进行 python 关键字搜索和单词计数器并写入单个 csv? [关闭]

Python:使用熊猫从csv文件中提取特定列(包含特殊字符)