Как перезаписать значения с одного файла в другой при определенном условии?
У меня задача:
Есть файл, в котором на строку есть 2 текстовых значения. Значения разделены пробелом Вот пример данных:
90.01 2e-06
90.02 4e-06
90.03 6e-06
90.04 8e-06
90.05 1e-05
90.06 1.2e-05
90.07 1.4e-05
90.08 1.6e-05
90.09 1.7e-05
90.1 1.9e-05
90.11 2.1e-05
90.12 2.3e-05
90.13 2.5e-05
90.14 2.7e-05
90.15 2.9e-05
90.16 3.1e-05
90.17 3.3e-05
90.18 3.5e-05
90.19 3.7e-05
90.2 3.9e-05
90.21 4.1e-05
90.22 4.3e-05
90.23 4.5e-05
Я хочу пройтись по файлу и суммировать значения во второй колонке. Как только сумма этих значений, превышает определенное значение, я хочу записать в другой файл значение из колонки 1, на котором произошло это превышение и начать процесс опять.
Т. е. во втором файле должно быть что-то вроде:
90.1
90.5
91.0
91.5
Делаю это так:
with open('long_1.txt', 'a+') as k:
with open('long.txt', 'r') as f:
summa = 0
for i in f:
s = i.split()
s = float(s[1])
summa +=s
if summa >1:
k.write(str(s[0]) + '\n')
summa = 0
Но, второй файл у меня почему-то пустой. Где я сделал ошибку и как правильно решить задачу? Я могу решить задачу с посмошью списков и массивов, но этот вериант не подходит)
Спасибо)
Ответы (2 шт):
- Во-первых, Ваш код не отработает, потому что Вы в
sзаписываете какой-тоfloat, а затем пытаетесь обратиться к[0]элементу этогоfloat'а. Исправленный код:
with open('long_1.txt', 'a+') as k:
with open('long.txt', 'r') as f:
summa = 0
for i in f:
s = i.split()
summa += float(s[1])
if summa >1:
k.write(str(s[0]) + '\n')
summa = 0
- Во-вторых, алгоритм написан верно. Просто не выполняется условие
> 1. Если поставить условие> 0.0001, то новые записи появляться будут.
Мне захотелось немного отрефакторить Ваш код:
with open("long.txt", "r") as ifp, open("long_1.txt", "w") as ofp:
current_sum = 0
for ifp_line in ifp:
lhs, rhs = ifp_line.split()
current_sum += float(rhs)
if current_sum > 1:
ofp.write(lhs + "\n")
current_sum = 0
В context manager можно открывать несколько файлов - нет необходимости использовать вложения:
with open('long_1.txt', 'a+') as fout, open('long.txt', 'r') as fin:
sum_ = 0
for line in fin:
v1, v2 = line.split()
sum_ += float(v2)
if sum_ > 1:
print(f"{v1}", file=fout)
sum_ = 0