как заменить несколько строк определенных столбцов текстового файла - PullRequest
0 голосов
/ 13 мая 2019

У меня есть несколько файлов, я хочу скопировать два столбца из одного файла и заменить его на два других столбца в другом файле.первый файл содержит:

ag-109   3.905E-07  
am-241   1.121E-06  
am-243   7.294E-09  
cs-133   1.210E-05  
eu-151   2.393E-08  
eu-153   4.918E-07  
gd-155   2.039E-08  
mo-95   1.139E-05  
nd-143  9.869E-06  

.......
........

, а второй файл:

h-1         10  0 0.06674    293   end  
zr          11  0 0.0423     293   end  
u-234       101 0 7.471e-06  293   end  
u-235       101 0 0.0005265  293   end  
u-236       101 0 0.0001285  293   end  
u-238       101 0 0.02278    293   end  
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  
.........  
.......
.   
.    
u-234       1018 0 7.471e-06 293   end  
u-235       1018 0 0.0005265 293   end  
u-236       1018 0 0.0001285 293   end  
u-238       1018 0 0.02278   293   end  
np-237      1018 0 1.018e-05 293   end  
pu-238      1018 0 2.262e-06 293   end  

Я хочу заменить первый столбец файла2 из файла1, а второй столбец файла1 - четвертым столбцом файла2.

файл 2 содержит больше строк, которые я хочу продолжить читать без изменений.

Вторая проблема: файл2 повторяет столбец 1 18 раз.в столбце «101» - «1018» каждые 18 нуклидов в первом столбце имеют разные значения в столбце 4

, который я пытался прочитать файл1 построчно и то же самое для файла2.затем начните замену с определенного значения '11', включая условие для столбца 2, чтобы он изменялся каждый раз, когда итерация нуклидов завершалась (у меня есть 29 нуклидов).

with open('100_60.inp','a+') as fapp:
    with open("20_3.2_10_100_18.txt") as copf:
        line = fapp.readline()
       # if not line:
        #    break
        source = re.split(r"\s+", line.strip())

        nuclide = copf.readline()
       # if not nuclide:
         #   break
        comp = re.split(r"\s+", nuclide.strip())

if len(source)==6 and source[1] != '11':
           for i in range(29):
               source[3][i]= nuclide[1][i]
               source[0][i] = nuclide[0][i]
               fapp.append(replace(source[0][i],nuclide[0][i]))
if len(source)==6 and source[1] !='101':
               for i in range(29):
               source[3][i]= nuclide[1][i]
               source[0][i] = nuclide[0][i]
               fapp.append(replace(source[0][i],nuclide[0][i]))

ожидаемый результат должен быть таким:

h-1         10  0 0.06674    293    end  
zr          11  0 0.0423     293    end  
ag-109      101 0 3.905E-07 293   end  
am-241      101 0 1.121E-06 293   end  
am-243      101 0 7.294E-09 293   end  
cs-133      101 0 1.210E-05   293   end  
eu-151      101 0 2.393E-08 293   end  
eu-153      101 0 4.918E-07 293   end  
gd-155      101 0 2.039E-08  293   end  
....  
....  
....   

1 Ответ

1 голос
/ 13 мая 2019

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

если столбцы разделены вкладками, вы также можете сделать это в Excel, не создавая сценарий самостоятельно https://support.geekseller.com/knowledgebase/convert-txt-file-csv/

После этого вы можете использовать модуль csv и прочитать файл, получив подсказку, в которой вы можете добавлять или удалять ключи (столбцы). Я не могу сейчас написать полноценное рабочее решение для вас, но я надеюсь, что это даст вам подсказку, как к нему подойти.

...