首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向perl子进程发送python变量

如何向perl子进程发送python变量
EN

Stack Overflow用户
提问于 2017-05-04 15:30:01
回答 1查看 126关注 0票数 0

我正在尝试使用perl regex进行一些复杂的匹配。在shell中,它看起来是:

代码语言:javascript
复制
cut -f6 file.txt | perl -ne 'chomp; $col=$_; $clipped = 0; foreach($col =~ m/(\d+)S/g){ $clipped +=$_;} print $col,"\t",$clipped,"\n";'

这是可行的,但是这个脚本的下游部分花了很长时间,所以我想用python来代替。

为了清晰起见,perl行在文件的第六列中在字符"S“之前查找数字。可能有多个"S",因此它在任何"S“之前找到任何数字并存储,然后$clipped对这些数字进行汇总。如果列看起来像12S1I100M37S,那么对于前面的12S和末尾的37S,$clipped总共是49。它忽略了所有其他数字。

回到python:使用split()5,我可以将第六列传递给一个变量,但我不知道如何将它传递给subprocess.call('perl -ne等‘)。

有人能建议我如何做到这一点,或者如何使用python模块进行相同类型的匹配吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-04 15:58:51

很可能有一种更紧凑的方式来用Python编写这篇文章。这只是我的一次尝试,从字面上讲,这就是问题的定义/边界。总之,如果您想坚持使用re,那么使用模块无疑是一个简单的选择。

代码语言:javascript
复制
import re

def sum_str_digits(my_string):
    split_string = re.split(r'(\d+)', my_string)
    sums = 0
    for index, string_piece in enumerate(split_string):
        if string_piece == 'S':
            sums += int(split_string[index - 1])
    return sums

# For Python 2.x
print sum_str_digits(my_string='12S1I100M37S')

# Python 3.x
print(sum_str_digits(my_string='12S1I100M37S'))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43787141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档