Pythonの初心者、私はファイルを読んで基本的な操作を行うことに慣れてきました。ただし、今度は、あるファイルを別のファイルに基づいてフィルタリングしたいと思います。file1をフィルタリングして、file2の列3のスコアが100000未満の行を削除したいと思います。メインデータファイル(file1)があります:
7 303 0.207756232686981
16 23 0.208562019758507
6 57 0.208727272727273
7 80 0.209065354884048
11 124 0.209500609013398
そして、これと同じ新しいデータファイルを作成したいのですが、2番目のファイル(file2)からの情報に基づいて、スコアが100000未満の行を削除します。
chr7 303 292526
chr16 23 169805
chr6 57 62822
chr11 124 320564
chr7 80 300291
両方のファイルの最初の2列には、その行が両方のファイルで同じ大文字と小文字を区別しているかどうかを判断するための情報が含まれています。ただし、2番目のファイルには各番号の前に「chr」が追加されています(この「chr」は無視できます)。最初のファイルのすべての行が2番目のファイルに存在しますが、2番目のファイルには、最初のファイルには無視できる行がいくつかあります。
したがって、線の上の例を見てください。
6 57 0.208727272727273
ファイル2の3列目の値が100,000未満であるため、新しい出力から削除されますが、最初のファイルの他のすべての行は100000を超える値であるため、含まれます。出力ファイルがファイル1と同じ行順。
どんな助けでも大歓迎です。私は通常、のpython構造を使用します
for line in inputfile:
line = line.rstrip()
fields = line.split("\t")
したがって、この構造を構築する答えは非常に素晴らしいでしょう。
質問が不明な場合はお知らせください。
これまでの解決策:
#!/usr/bin/env python
f2 = open( '/mnt/genotyping/CT/GreatApes/HKA/callability/callable_sites_per_region_500Kb.txt', 'r')
d2 = {}
print f2
for line in f2:
line = line.rstrip()
fields = line.split("\t")
key = (fields[0].replace('chr', ''), fields[1])
d2[key] = int(fields[2])
f1 = open( '/mnt/genotyping/CT/GreatApes/HKA/Barcelona_approach/500kb/cov_5/Homo-Gorilla/R_plots/Gorilla_genome_dist_cov5.txt', 'r')
for line in f1:
line = line.rstrip()
fields = line.split("\t")
if 'region' not in line:
key = (fields[0], fields[1])
if d2[key] >= 100000:
print line
ありがとう