将perl脚本转换为python

时间:2014-05-06 15:46:46

标签: python perl

我有点傻问题。我发现这个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]

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行,特别是如果文件只有两列。