2015-09-06 19 views
0

我一直在努力寻找一个代码,它将给我所有的第一位数字的总和(1,2,3,...,9 )从文本文件中单独编号。我也想修改/修改第二和第二位数字的代码。有人能够帮助吗?到目前为止我所做的是: 对于第一个数字: fgrep -oE“[[:digit:]] {1,}”'filename'| grep“^ 1”| wc -l 对于第二个数字: fgrep -oE“[[:digit:]] {2,}”'filename'| grep“^ 1”| wc -l从一个文本文件中计算第一位,第二位和前两位数的代码

为了得到它的其他数字(2,3,...,9),我将“^ 1”修改为例如“^ 2”等等...... 我很肯定我得到的第二位数公式的结果肯定是错误的...... 我需要求助,谢谢! :)

+1

这将有助于给出一个示例输入和输出 – KevinOrr

+1

以及“Python”代码示例。你尝试过正则表达式吗? –

+0

说实话,我所做的就是将上面的代码放入我的OS X终端并让它运行。我不是一个计算机的人,但需要这个为我的论文做一些测试。你能帮忙吗? –

回答

0

一般来说,你可以很容易地做这样的事情......

import re 

def sum_nums_in_text_by_indices(text, indices=slice(0,1)): 
    return sum(int(n[indices]) for n in re.findall('\d+', text)) 

例子:

>>> sum_nums_in_text_by_indices('123 123')    # first digits 
2 

>>> sum_nums_in_text_by_indices('123 123', slice(1,2)) # second digits 
4 

>>> sum_nums_in_text_by_indices('123 123', slice(0,2)) # first and second digits 
24 

为了使用这个正确的,你应该熟悉Pythons Slice Notation。 (资料:slice()

的功能可以进一步简化:

def sum_nums_in_text_by_indices(text, start=0, stop=1): 
    return sum(int(n[start:stop]) for n in re.findall('\d+', text)) 


>>> sum_nums_in_text_by_indices('123 123') 
2 

>>> sum_nums_in_text_by_indices('123 123', start=1, stop=2) 
4 

>>> sum_nums_in_text_by_indices('123 123', start=0, stop=2) 
24 
+0

感谢您的迅速回复!如果我有一个文本文件,即内容也是文字的年度声明,这是否也适用?它是否会自动过滤数字,因为我了解您的代码仅适用于仅包含数字的文本文件。 –

+0

它发现文本中的所有数字序列。尝试一下,看看。如果你想得到更具体的帮助,你应该提供更具体的信息。 –

0

我就猜你想要什么。

示例输入文件。 (文件路径:/tmp/ggz

240872014 
3406121147 
131 
115388201300032 
13022020149210000854942 
124342014 
1148272013102002 
11975281552961075898430474 
240872014 
118113201520150113164711178 

计数首先每行的数字发生。

$ grep -oP "^[0-9]" /tmp/ggz | sort | uniq -c 
    7 1  # Digit `1` has 7 occurrences. 
    2 2  # Digit `2` has 2 occurrences. 
    1 3  # Digit `3` has 1 occurrences. 
      # No occurrences for digit `4` ~ `9` and `0` 

计算每行前两位数字的出现次数。

$ grep -oP "^[0-9]{2}" /tmp/ggz | sort | uniq -c 
    4 11  # Number `11` has 4 occurrences. 
    1 12 
    2 13 
    2 24 
    1 34 

计算每行第二位数字的出现次数。

$ grep -oP "(?<=^.)[0-9]" /tmp/ggz | sort | uniq -c 
    4 1  # Digit `1` has 4 occurrences. 
    1 2 
    2 3 
    3 4 
相关问题