У меня есть входной файл для системы кодирования, файл содержит символы, целые числа, тексты и числа с плавающей запятой.
и у меня есть другой файл содержит 2 столбца.
нет конкретного шаблона для файла. какая-то часть - это только текст, другая как массив, другая как столбцы.
мое беспокойство, я хочу изменить определенные столбцы. У меня уже есть модуль кода для изменения столбцов. его чтение из другого файла и изменение значений в другом файле.
проблема в том, что это просто чтение определенных столбцов. он игнорирует данные до или после.
данные в файле 1 примерно так:
ag-109 4.778E-08
am-241 3.525E-08
am-243 1.157E-11
cs-133 3.820E-06
eu-151 1.546E-08
eu-153 1.086E-07
gd-155 1.018E-08
mo-95 3.650E-06
nd-143 3.300E-06
данные выглядят так в файле 2:
csas6
gbc-32-keno6
ce_v7_endf
read composition
........
(some text and numbers)
.......
h-1 10 0 0.0667 293 end
zr 11 0 0.0432 293 end
u-234 101 0 7.471e-06 293 end # the columns
u-235 101 0 0.0005265 293 end # that i want
u-236 101 0 0.0001285 293 end # to change from
u-238 101 0 0.02278 293 end # another file
np-237 101 0 1.018e-05 293 end
pu-238 101 0 2.262e-06 293 end
pu-239 101 0 0.000147 293 end
pu-240 101 0 4.138e-05 293 end
pu-241 101 0 2.028e-05 293 end
столбцы после 500 строк, это разные столбцы, которые я не хочу менять, затем текст и массивы.
У меня уже есть другой файл с двумя столбцами, чтобы изменить столбец 1 и 4 из вышеуказанного файла.
Благодаря @Serge он помог для этого модуля, он работает для изменения. но если перед столбцами есть текст, он не работает.
я хочу прекратить изменять, когда столбец 2 станет '201'
после этого я хочу продолжить чтение файла и сохранить его в другом файле после изменения.
как я могу изменить файл и сохранить весь файл после изменения.
with open('file2') as f2, open('file1') as f1, open('out.txt','w') as fout:
sep = re.compile(r'\s+') # compile the separator for re
while True:
# read a line from each file
try:
line1 = next(f1)
line2 = next(f2)
except StopIteration:
break # stop processing on end of any file
# split lines in fields
fields1 = sep.split(line1.strip())
fields2 = sep.split(line2.strip())
if fields2[1] == '201':
break # stop processing if past 101
# replace fields and write a line on the output file
fields2[0] = fields1[0]
fields2[3] = fields1[1]
fout.write(' {} {} {} {} {} {} \n'.format(*fields2))
ожидаемые результаты должны быть примерно такими:
csas6
gbc-32-keno6
ce_v7_endf
read composition
........
(some text and numbers)
.......
ag-109 101 0 4.778E-08 293 end
am-241 101 0 3.525E-08 293 end
am-243 101 0 1.157E-11 293 end
cs-133 101 0 3.820E-06 293 end
eu-151 101 0 1.546E-08 293 end
eu-153 101 0 1.086E-07 293 end
gd-155 101 0 1.018E-08 293 end
mo-95 101 0 3.650E-06 293 end
nd-143 101 0 3.300E-06 293 end
............ #( another columns stops when column 2 ='201'
...............
# mixture of text, arrays numbers....