将perl脚本转换为python

将perl脚本转换为python,python,perl,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=&l

我有一个有点傻的问题。我找到了这个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";
        }
}

这将是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
行,尤其是当文件只有两列时。

您可以先尝试。如果你陷入困境,展示你到目前为止所拥有的,并准确地解释你遇到的问题。用外行的话说,你知道这个脚本试图做什么吗?如果你用谷歌搜索一下,你会发现上百个python脚本也在做同样的事情。@Mat,我知道你想看看我的努力,但对我来说,这就像是在没有字典的情况下从阿拉伯语翻译成英语,因为我从来没有用perl编程过,也不熟悉语法。我理解一般的概念,但实际上我对你付出的努力不太感兴趣。如果从长远来看能帮助别人的话,我对努力帮助别人很感兴趣。像“为我翻译这个”这样的问题对你有帮助,基本上没有其他人——没有人会有完全相同的代码需要翻译,即使他们有,他们也可能找不到你的问题。至于您的编辑,它缺少描述您现在问题的部分。少了什么?你的代码做了什么/没有做perl代码做的事情?你的Python不是一个准确的音译。Perl有效地结合了第二个循环和第三个循环,避免了将第二个文件的整个部分存储到内存中(因此它一次只存储第二个文件的一行),而Python代码将第二个文件的整个部分读取到内存中,然后处理它存储的内容。但是,与Perl中的2个循环相比,Python中存在3个循环,这一点应该是显而易见的。
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])