この形式の大きな.csvファイルがあります。
「文字列1」、「文字列2」、「文字列3」、「文字列4」、「文字列5」、「文字列6」など
次の列にリンクされている限り、列から情報を抽出することに興味があります。
より明確な例を示すために、列番号3と4がチームによって形成され、それらがホストする相手を表すとします(列3はローカルチームです)。
「First」、「Result」、「Philadelphia」、「Miami」など
「Second」、「Result」、「Dallas」、「Cleveland」など
「Third」、「Result」、「Miami」、「Cleveland」、など
「第4」、「結果」、「クリーブランド」、「マイアミ」など
「第5」、「結果」、「ダラス」、「フィラデルフィア」など
「第6」、「結果」、「クリーブランド」、「ダラス」など
「第7」、「結果」、「マイアミ」、「フィラデルフィア」など
「第8」、「結果」、「フィラデルフィア」、「マイアミ」など
「第9」、「結果」、「クリーブランド」、 「マイアミ」など
そして、私は彼らがホストするチームからなるリストを繰り返しなしで取得したい
Cleveland hosts
Dallas
Miami
Dallas hosts
Cleveland
Philadelphia
Miami hosts
Cleveland
Philadelphia
Philadelphia hosts
Miami
その後、両方のパターンに関するすべての行をファイルに書き込みたいと思います。これは、クリーブランドとマイアミの一致を確認したい場合は、次のような.csvを作成したいということです。
「第3」、「結果」、「マイアミ」、「クリーブランド」など
「第4」、「結果」、「クリーブランド」、「マイアミ」など
「第9」、「結果」、「クリーブランド」、「マイアミ」、等
次のコードを使用して、1つの列を読み取り、すべての一意の要素を辞書に保存して、後でそこから単語を選択できるようにします。列番号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)
そして、1つの要素だけでうまく機能しますが、もちろん、前の条件が明確に定義されていないため、希望する結果を得るために何を変更すればよいかわかりません。
セットの辞書を使用して、ホスティングチームと一意の訪問チームを追跡できます。これが例です。
import csv
# load the csv file
rows = [r for r in csv.reader(file('sample.csv','r'))]
# order preservation list
preserve_order = []
# track the schedule from the hosting team's point of view
hosting_teams = {}
# change the wanted column here
wanted_column = 3
for row in rows:
# strip out the double quotes
row = [c.replace('"','') for c in row]
the_host = row[2]
the_order = row[0]
preserve_order.append(the_order)
# create a dictionary with a unique set of visiting teams
host_schedule = hosting_teams.setdefault(the_host,set([]))
# add the team visit
visiting_team = row[wanted_column]
host_schedule.add((visiting_team,the_order))
output = []
for hosting_team,host_schedule in hosting_teams.items():
for visiting_team,the_order in host_schedule:
output.append([the_order,"Result",hosting_team,visiting_team])
output.sort(key=lambda x:preserve_order.index(x[0]))
csv.writer(file('output.csv','wb')).writerows(output)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加