Вычисление отношения между двумя файлами и запись его в другой файл

Используя Python, у меня есть два больших (одинаково длинных) файла, в которых числа разделены пробелами:

0,11158E-13 0,11195E-13 0,11233E-13... # file1

0.11010E-13 0.11070E-13 0.11117E-13... # file2

Существуют различия в значениях, и я хотел бы получить относительные различия и записать их в том же формате в третий файл. Я могу сделать это для первого значения, но у меня есть проблема, когда дело доходит до ИТАРИРОВАНИЯ процесса (так что все значения вычисляются).

Это код (я новичок в коде Python):

with open('ex1.idl', 'r') as f1:      #this opens the first file
    with open('ex2.idl', 'r') as f2:      #this opens the second file

        f1 = f1.read(13)          # reading the length of the value (ex1.idl)
        f2 = f2.read(13)          # reading the length of the value (ex2.idl)
        f1 = float(f1)          #assigning the numerical value for the string
        f2 = float(f2)          #assigning the numerical value for the string
        c = f1/f2               #calculating relative values    

with open('ex3.txt', 'w') as f3:          #opening the new file and
    f3.write(str(c))                      #writing into the new file as a string

Это путь или я должен пойти с другим подходом? Ответ очень ценится.

1 ответ

Решение

Похоже, ваши файлы имеют одну строку каждый. Таким образом, самый простой способ получить числа в каждом файле - это просто прочитать все содержимое файла, удалить ненужные символы, а затем разделить их на пустое пространство, разделяя значения с плавающей запятой. Разделив пространство, вы получите список strings, который вы можете заставить floats, На этом этапе у вас должно быть два списка значений с плавающей запятой, и именно тогда вы используете комбинацию zip а также map функции для выполнения операции разделения. Ниже приводится иллюстрация:

with open('ex1.idl') as f1, open('ex2.idl') as f2:
    with open('ex3.txt', 'w') as f3:
        f1 = map(float, f1.read().strip().split())
        f2 = map(float, f2.read().strip().split())
        for result in map(lambda v: v[0]/v[1], zip(f1, f2)):
            # This writes the results all in one line
            # If you wanted to write them in multiple lines,
            # then you would need replace the space character
            # with a newline character.
            f3.write(str(result)+" ")

Я надеюсь, что это окажется полезным.

Другие вопросы по тегам