Как вы можете создать оператор if else в python, когда у вас есть файл с текстом и цифрами.
Скажем, я хочу заменить значения из третьего в последний столбец в файле ниже. Я хочу создать оператор 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)
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']
Есть лучшие способы добиться того, чего вы хотите, но я просто хотел исправить ваш код.
1
перешел на0
и.
во втором примере повернуть в0
но первый образец не?