我有点傻问题。我发现这个perl脚本并且它可以工作,但是我没有在perl上编程,我更喜欢python。所以我发现很难根据我的需要修改脚本。有人可以帮我在python中改变它吗?
#!/usr/bin/perl -w
die "SINTAX: $0 file_elenco file_match\n" if ($#ARGV <1);
$file1=$ARGV[0];
$file2=$ARGV[1];
%h=();
open (A,"< $file1");
while ($r=<A>){
chomp $r;
$h{$r}=1;
}
close A;
open (B, "< $file2");
while ($r=<B>){
# chomp $r;
@v=split(/\t/,$r);
if (defined ($h{$v[1]})){
print "$v[0]\t$v[1]\n";
}
}
我的尝试,
file1=sys.argv[0]
file2=sys.argv[1]
dictA= dict()
with open('file1','r') as f1:
for line1 in f1:
listA = line1.split('\t')
dictA[listA[1]] = listA
dictB= dict()
with open('file2','r') as f2:
for line1 in f2:
listB = line1.split('\t')
dictB[listA[1]] = listB
for key in dictB:
if key in dictA:
print key[0]+'\t'+key[1]
答案 0 :(得分:2)
这将是Perl脚本的字面翻译:
import sys
file1=sys.argv[1]
file2=sys.argv[2]
dictA= dict()
with open(file1,'r') as f1:
for line1 in f1:
dictA[line1.rstrip('\n')] = 1
with open(file2,'r') as f2:
for line1 in f2:
listB = line1.rstrip('\n').split('\t')
if listB[1] in dictA:
print "%s\t%s" % (listB[0], listB[1])
顺便说一句,在你的Perl脚本中,你确实要取消注释chomp $r
行,特别是如果文件只有两列。