使用 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 文件中的字符串搜索中打印多列的主要内容,如果未能解决你的问题,请参考以下文章
python 从文本中提取每一行的特定字符串输出到csv文件