Python: чтение строк из файла .txt и расчет с ними

Я надеюсь, что у вас есть приятные каникулы до сих пор!

Я пытаюсь прочитать файл .txt, в котором значения хранятся и отделяются друг от друга пропуском строки, а затем вычисляются со значениями.

Я пытаюсь понять, как это сделать с помощью скрипта Python.

Скажем, это содержимое моего текстового файла:

0.1 #line(0)
1.0
2.0
0.2 #line(3)
1.1
2.1
0.3 #line(6)
1.2
2.2
...

В основном я бы реализовал операцию, которая вычисляет:

line(0)*line(1)*line(2) на первом этапе записывает его в другой файл .txt, а затем продолжает line(3)*line(4)* строка(5) и так далее:

with open('/filename.txt') as file_:
    for line in file_:
       for i in range(0,999,1):
           file = open('/anotherfile.txt')
           file.write(str(line(i)*line(i+1)*line(i+2) + '\n')
           i += 3     

У кого-нибудь есть идея, как заставить это работать?

Любые советы будут оценены!

Спасибо, Стив


person Steve.1990    schedule 25.12.2016    source источник
comment
Какая у тебя проблема на данный момент? К вашему сведению, вам, вероятно, следует считывать данные в свою программу, обрабатывать их, а затем записывать, а не делать и то, и другое одновременно. И вам нужна закрывающая скобка для этой функции write.   -  person FlipTack    schedule 25.12.2016
comment
Насколько велик ваш файл?   -  person Yevhen Kuzmovych    schedule 25.12.2016
comment
какая версия питона? 2 или 3?   -  person Ravi Shankar Bharti    schedule 25.12.2016


Ответы (2)


Это будет умножать три числа за раз и записывать произведение трех в другой файл:

with open('numbers_in.txt') as fobj_in, open('numbers_out.txt', 'w') as fobj_out:
    while True:
        try:
            numbers = [float(next(fobj_in)) for _ in range(3)]
            product = numbers[0] * numbers[1] * numbers[2]
            fobj_out.write('{}\n'.format(product))
        except StopIteration:
            break

Здесь next(fobj_in) всегда пытается прочитать следующую строку. Если строки больше нет, возникает исключение StopIteration. except StopIteration: перехватывает это исключение и завершает цикл. Генератор списка [float(next(fobj_in)) for _ in range(3)] преобразует три числа, считанные из трех строк, в числа с плавающей запятой. Теперь умножение трех чисел — это вопрос индексации в списке numbers.

person Mike Müller    schedule 25.12.2016

Ты можешь это сделать:

file = open('/anotherfile.txt','w')
i=0
temp=1
with open('/filename.txt') as file_:
    for line in file_:
        temp = temp*int(line)
        if(i>1 && i%3==0):
           file.write(str(temp)+'\n')
           temp=1
        i += 1
person Ravi Shankar Bharti    schedule 25.12.2016