Python if / else语句混乱

时间:2018-09-25 19:55:19

标签: python if-statement


当您同时具有文本和数字文件时,如何在python中创建if else语句。
假设我要替换下面文件中第三到最后一列的值。我想创建一个if else语句来替换值<5或是否存在点“”。为零,并尽可能使用该值作为整数。
使用awk的快速而肮脏的解决方案看起来像这样,但是我很好奇如何使用python处理此类数据:

 awk -F"[ :]" '{if ( (!/^#/) && ($9<5 || $9==".") ) $9="0" ; print }'

那么您如何解决这个问题?
谢谢

输入文件:

\##Comment1
\#Header
sample1 1   2   3   4   1:0:2:1:.:3
sample2 1   4   3   5   1:3:2:.:3:3
sample3 2   4   6   7   .:0:6:5:4:0



所需的输出:

\##Comment1
\#Header
sample1 1   2   3   4   1:0:2:0:0:3
sample2 1   4   3   5   1:3:2:0:3:3
sample3 2   4   6   7   .:0:6:5:4:0
SUM = 5


到目前为止的结果

['sample1', '1', '2', '3', '4', '1', '0', '2', '0', '0', '3\n']
['sample2', '1', '4', '3', '5', '1', '3', '2', '0', '3', '3\n']
['sample3', '2', '4', '6', '7', '.', '0', '6', '5', '4', '0']


到目前为止,这是我尝试过的操作:

import re

data=open("inputfile.txt", 'r')
for line in data:
    if not line.startswith("#"):
        nodots = line.replace(":.",":0") 
        final_nodots=re.split('\t|:',nodots)
        if (int(final_nodots[8]))<5:
            final_nodots[8]="0"
            print (final_nodots)
        else:
            print(final_nodots)

1 个答案:

答案 0 :(得分:0)

data=open("inputfile.txt", 'r')

import re
sums = 0
for line in data:
    if not line.startswith("#"):
        nodots = line.replace(".","0") 
        final_nodots=list(re.findall('\d:.+\d+',nodots)[0])
        if (int(final_nodots[6]))<5:
            final_nodots[6]="0"
        print(final_nodots)
        sums += int(final_nodots[6])
print(sums)

您非常接近,但是您的final_nodots返回:上的拆分而不是前几个数字的拆分,因此您的8应该是3。之后,只需添加一个sums计数器即可跟踪该插槽。

['sample1 1   2   3   4   1', '0', '2', '0', '0', '3\n']

有更好的方法来实现您想要的,但是我只是想修复您的代码。