У меня есть большой файл .csv с этим форматом:Loop через файлы .csv с условиями в разных столбцах
«Строка 1», «Строка 2», «Строка 3», «Строка 4» , «Строка 5», «Строка 6» и т. Д.
Я заинтересован в извлечении информации из столбца при условии, что он связан со следующим.
Чтобы дать более ясный пример, предположим, что столбцы 3 и 4 сформированы командами, и они представляют, кого они размещают (col 3 - это местная команда).
"Первый", "Результат", "Филадельфия", "Майами" и т.д.
"Второй", "Результат", "Даллас", "Кливленд" и т.д.
"Третий", "Результат" "Майами", "Кливленд" и т.д.
"Четвертый", "Результат", "Кливленд", "Майами" и т.д.
"Пятый", "Результат", "Даллас", "Филадельфия", и т.д.
«6», «Результат», «Кливленд», «Даллас» и т. Д.
«Седьмой», «Результат», «Майами», «Филадельфия» и т. Д.
«Восьмой», «Результат», «Филадельфия», «Майами» и т. Д.
«Девятый», «Результат», «Кливленд», «Майами» и т.д.
И я хочу, чтобы получить список, состоящий из команд, они хозяевах, без повторения
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)
И только с одним элементом он работает хорошо, но, конечно же, как и предыдущее условие не определена, я не знаю, что я должен изменить, чтобы получить результат, который я хочу.
Спасибо за помощь, проблема в том, что если я это сделаю, то .csv является глобальным (все совпадения появляются) и сортируются случайным образом, это игра 9 могут появиться перед игрой 4, несмотря на то, что оба игрока были сыграны в Клелланде, а Майами была принимающей командой, и я также увижу матчи, которые играют Филадельфия и Даллас. Если я не ошибаюсь, ваш код будет писать .csv со всеми строками, собранными вторым столбцом. Это работает, но на самом деле это не решает мою проблему. Во-первых, как я мог использовать OrderedDict с двумя аргументами, отсортированными по первому из них, а во-вторых, как бы я написал только один из «двойных паттернов» в .csv? –
Я добавил код, чтобы держать игры в порядке. – Genome