Ich versuche, eine Perl-Regex zu verwenden, um etwas komplizierten Abgleich durchzuführen. In der Schale, sieht es so aus:So senden Sie eine Python-Variable an einen Perl-Subprozess
cut -f6 file.txt | perl -ne 'chomp; $col=$_; $clipped = 0; foreach($col =~ m/(\d+)S/g){ $clipped +=$_;} print $col,"\t",$clipped,"\n";'
Und das funktioniert, aber die nachgelagerten Teile dieses Skript zu lange einnehmen, so möchte ich dies in Python tun, statt.
Aus Gründen der Übersichtlichkeit findet die Perl-Zeile die Nummer vor dem Zeichen "S" in der sechsten Spalte der Datei. Es kann mehr als ein "S" geben, also findet es eine Ziffer vor jedem "S" und speichert diese, dann addiert $ clipped diese Ziffern. Wenn die Spalte wie 12S1I100M37S aussieht, würde $ clipped insgesamt 49 ergeben, für die 12S an der Front und die 37S am Ende. Es ignoriert alle anderen Ziffern.
Zurück zu Python: mit Split() [5], kann ich die sechste Spalte zu einer Variablen, aber ich weiß nicht, wie das an subprocess.call übergeben ('perl -ne etc').
Kann jemand vorschlagen, wie ich dies tun kann oder wie ich das Python Re-Modul für die gleiche Art der Übereinstimmung verwenden könnte?
Einfacher: 'perl -lane '$ sum = 0; $ sum + = $ _ für $ F [5] = ~/(\ d +) S/g; drucke "$ F [5] \ t $ sum" ''. (Fügen Sie '-F \ t' hinzu, wenn die Eingabe durch Tabulatoren getrennt ist.) Nicht sicher, warum Sie denken, dass dies in Python schneller wäre (es sei denn, der Rest des Programms ist in Python geschrieben und Sie möchten den Unterprozess vollständig vermeiden, aber Sie haben Sie angegeben will immer noch 'perl' verwenden). – ikegami
Es ist nicht dieser Schritt, der in Python schneller ist - es ist ein Downstream-Prozess, der ist, aber ich denke, ich kann sie alle in einem einzigen Skript zusammenfügen. Wie übergibt das eine Python-Variable an diese Perl-Zeile? – nietzschemouse
Wenn Sie ein einzelnes Skript wünschen, warum fragen Sie, wie Sie Variablen an andere Skripte übergeben ?! – ikegami