【发布时间】:2014-05-16 19:43:56
【问题描述】:
我有一个采用这种格式的大型 .csv 文件:
“字符串 1”、“字符串 2”、“字符串 3”、“字符串 4”、“字符串 5”、“字符串 6”等
我有兴趣从列中提取信息,只要它链接到以下列。
举一个更清楚的例子,假设第 3 列和第 4 列由团队组成,它们代表他们主办的人(第 3 列是本地团队)。
“第一”、“结果”、“费城”、“迈阿密”等
“第二”、“结果”、“达拉斯”、“克利夫兰”等
“第三”、“结果”、“迈阿密”、“克利夫兰”等
“第四”、“结果”、“克利夫兰”、“迈阿密”等
《第五》、《结果》、《达拉斯》、《费城》等
“第六”、“结果”、“克利夫兰”、“达拉斯”等
《第七》、《结果》、《迈阿密》、《费城》等
《第八》、《结果》、《费城》、《迈阿密》等
“第九”、“结果”、“克利夫兰”、“迈阿密”等
我想获得一份由他们主办的团队组成的列表,无需重复
Cleveland hosts
Dallas
Miami
Dallas hosts
Cleveland
Philadelphia
Miami hosts
Cleveland
Philadelphia
Philadelphia hosts
Miami
之后,我想在一个文件中写入有关这两种模式的所有行,也就是说,如果我想查看克利夫兰和迈阿密之间的匹配,我希望有一个这样的 .csv,
“第三”、“结果”、“迈阿密”、“克利夫兰”等
“第四”、“结果”、“克利夫兰”、“迈阿密”等
“第九”、“结果”、“克利夫兰”、“迈阿密”等
使用以下代码,我设法读取一列并将所有唯一元素存储在字典中,以便以后可以从中选择一个单词。我可以对第 4 列执行相同的操作,并通过将参数 Wanted_Column 的值更改为 3 来重复代码
import csv
from collections import Counter, defaultdict, OrderedDict
Var = 1
Wanted_Column = 2 # Col I want to analyze
with open('file.csv', "rb") as inputfile:
data = csv.reader(inputfile)
seen = defaultdict(set)
countd = Counter(
row[Wanted_Column]
for row in data
if row[Wanted_Column] and row[Wanted_Column] not in seen[row[Var]] and not seen[row[Var]].add(row[Wanted_Column])
)
y = OrderedDict(sorted(countd.items(), key = lambda t: t[0]))
for line in y:
print line
结果是,
Cleveland
Dallas
Miami
Philadelphia
所以,我的问题是,我应该添加什么来获得双重条件并以我暴露的方式显示元素?
之后,要在另一个文件中写入行,我有这段代码,
look_for = set([ELEMENT IN DICTIONARY])
with open('file.csv','rb') as inf, open('output_file.csv','wb') as outf:
incsv = csv.reader(inf, delimiter=',')
outcsv = csv.writer(outf, delimiter=',')
outcsv.writerows(row for row in incsv if row[Wanted_column] in look_for)
而且只有一个元素就可以很好地工作,但是当然,由于前面的条件没有很好地定义,我不知道我应该改变什么才能得到我想要的结果。
【问题讨论】:
标签: python loops csv dictionary