Вычисление отношения между двумя файлами и запись его в другой файл
Используя 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)+" ")
Я надеюсь, что это окажется полезным.