私は自動化したい仕事があり、助けてくれるでしょう:)タブ区切りのファイルの列を読んで、別のファイルで一致するエントリを検索してから、用語を置き換えたい
3つの列(ヘッダーなし)を含むタブ区切りファイルがあります。最初の2つの列には識別子が含まれ、3つ目の列には数値が含まれます。私は、コードのこの部分を使用してこのファイルの列を読んでいる、これまでのところ
ID1 ID2 0.123
ID3 ID4 0.456
ID5 ID6 0.789
:それは少しので、のように見える
素晴らしいですwith open(f) as tsv:
for column in zip(*[line for line in csv.reader(tsv, delimiter="\t")]):
for i in column:
Change_Name(i)
。 print文をインクルードすると、それぞれの3つのカラムのエントリを含む3つのタプルが返されます。
次に、別のファイルを繰り返して、各ID
のエントリに一致する行を見つけ、元のファイルの値を一致する行の 'name'フィールドのエントリに置き換えます。 3つ目の列は、2つのID間の相互作用を表すときと同じにする必要があります。
これまでは、1つの引数をとり、もう1つのcsv
ファイルを開き、それを反復してID
に一致する行を見つけました。一致するものが見つかると、その行の別のフィールドの値を出力します。機能は少しのようになっていること:
def Change_Name(ID):
file_csv = csv.DictReader(open('file.csv'))
for row in file_csv:
if row['ID'] == ID:
print(row['Name'])
私はしかし、実現したいことは何Name
値はそれを見つけるために使用されるIDと同じ位置に置換されていることです。私はstr.replace
を使いこなしましたが、これまでのところ、最初のものと同じ方法で構造化されたファイルを作成することができましたが、ID
はName
に置き換えられました。
私の質問が意味をなさないことを願っています。どんな助けも大変に感謝しています。
編集:私は他のファイルの例と私が期待していることを示すように求められました。
私の他のファイルには、少しのようになりますので、
ID, Name, att1, att2
ID1, matt, 8, abc
ID2, jo, 17, def
私は上記示したようなファイルを使用していた場合、私はID1
とID2
エントリを交換し、それらを置き換えるために私のスクリプトが欲しいですそのような「マット」と「ジョー」:
matt jo 0.123
ID3 ID4 0.456
ID5 ID6 0.789
のように...
質問を編集して、他のCSVファイルのサンプルと予想される出力を含めることができますか。 –
いいえ、私はいくつかの明確化を追加しました。 –