practize_1course/automation/promt.txt
2026-08-18 13:58:16 +03:00

373 lines
13 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Ты senior python developer. К тебе обратился преподаватель из вуза с заданием написать скрипт на python. Проверяй себя. Не совершай ошибок, файлы *.nb не должны ломаться при открытии их при помощи wolframnb (возможно, не надо трогать кэш). Твое ТЗ:
Формат скрипта: python.
ОС: arch linux
Формат бэкапа: если файл будет редактироваться, сделай бэкап файла в папку находящуюся в /tmp. После работы файлы бэкапа не удалять. Вывести пользователю в конце работы путь к паке бэкапа.
Краткое описание работы: Скрипт заходит во все подпапки директории, указанной в ключе --wolfram_noteooks. Открывает файлы с расширением .nb, если в названии файла есть "фитирование", файл пропускается; если в этом файле "d" не стоит на первом месте (или "d" вовсе нет) скрипт скипает этот файл и говорит об этом пользователю.
Рабочие файлы, структура работы:
Есть файл с коэфицентами:
```txt
174-66_2-3
J=13.2851
d = 2.027
v1 = 1.7300
n1 = 0.7600
vv1 = 2.4000
nn1 = 1.1050
v2 = 1.4012
n2 = 0.5547
vv2 = 1.1338
nn2 = 0.8500
-----------------------------
176-64_4-5
J=14.2006
d = 1.565
v1 = 1.2500
n1 = 0.8500
vv1 = 2.3000
nn1 = 1.1000
v2 = 0.8664
n2 = 0.5924
vv2 = 1.8880
nn2 = 0.6347
-----------------------------
152-88_6-7
J=7.82676
d = 2.875
v1 = 1.63
n1 = 0.856
vv1 = 2.615
nn1 = 1.23
v2 = 2.22
n2 = 0.559
vv2 = 2.428
nn2 = 0.738
-----------------------------
154-86_8-9
J=8.75268
d = 4.158
v1 = 1.82
n1 = 0.845
vv1 = 2.34
nn1 = 1.235
v2 = 2.157
n2 = 0.647
vv2 = 1.76
nn2 = 1.075
-----------------------------
156-84_10-11
J=10.6271
d = 6.444
v1 = 1.635
n1 = 0.855
vv1 = 2.405
nn1 = 1.225
v2 = 1.63
n2 = 0.5571
vv2 = 1.82
nn2 = 0.675
-----------------------------
158-82_12-13
J=11.9856
d = 2.0967
v1 = 2.1
n1 = 0.825
vv1 = 2.555
nn1 = 1.245
v2 = 1.573
n2 = 0.559
vv2 = 1.35
nn2 = 0.735
-----------------------------
160-80_14-15
J= 11.8301
d = 1.971
v1 = 1.965
n1 = 0.805
vv1 = 2.575
nn1 = 1.195
v2 = 1.213
n2 = 0.575
vv2 = 1.35
nn2 = 0.715
-----------------------------
162-78_16-17
J=11.9413
d = 1.92
v1 = 1.925
n1 = 0.805
vv1 = 2.5
nn1 = 1.165
v2 = 1.213
n2 = 0.57
vv2 = 1.35
nn2 = 0.695
-----------------------------
164-76_18-19
J=12.1752
d = 1.745
v1 = 2
n1 = 0.805
vv1 = 2.65
nn1 = 1.175
v2 = 0.795
n2 = 0.595
vv2 = 1.47
nn2 = 0.655
-----------------------------
166-74_20-21
J=12.0995
d = 1.855
v1 = 2.185
n1 = 0.755
vv1 = 2.5
nn1 = 1.165
v2 = 1.055
n2 = 0.575
vv2 = 1.51
nn2 = 0.635
-----------------------------
168-72_22-23
J=11.8913
d = 1.9
v1 = 2.155
n1 = 0.755
vv1 = 2.62
nn1 = 1.135
v2 = 1.025
n2 = 0.575
vv2 = 1.44
nn2 = 0.645
-----------------------------
170-70_24-25
J=11.7863
d = 1.997
v1 = 1.895
n1 = 0.785
vv1 = 2.605
nn1 = 1.125
v2 = 1.145
n2 = 0.565
vv2 = 1.5
nn2 = 0.635
-----------------------------
172-68_26-27
J=12.0157
d = 1.973
v1 = 1.895
n1 = 0.765
vv1 = 2.605
nn1 = 1.115
v2 = 1.375
n2 = 0.545
vv2 = 1.35
nn2 = 0.655
```
Есть файл wolfram notebook. В нем в самом начале стоит выражение d=*какое-то число*.
Примерная структура файла, если "d" стоит на первом месте:
```wolfram notebook
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* CreatedBy='Wolfram 15.0' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 154, 7]
NotebookDataLength[ 731705, 17288]
NotebookOptionsPosition[ 687975, 16585]
NotebookOutlinePosition[ 688773, 16613]
CellTagsIndexPosition[ 688693, 16608]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"d", "=", "2.027"}]], "Input",
CellChangeTimes->{
3.991926627241884*^9, {3.9919752407542057`*^9, 3.9919752437472878`*^9},
3.9920650045886707`*^9, {3.993120093374651*^9, 3.993120098406262*^9}, {
3.9931205775772543`*^9, 3.9931205930074*^9}, {3.99312068244851*^9,
3.993120683031312*^9}, {3.993120763928855*^9, 3.993120796207575*^9}, {
3.993120826638487*^9, 3.99312091050727*^9}, {3.993134989219914*^9,
3.99313504530585*^9}, {3.99376504479251*^9, 3.9937650448755198`*^9}, {
3.993794858519045*^9, 3.993794859582933*^9}, {3.993794914198393*^9,
3.993794918313219*^9}, {3.99379500667054*^9, 3.993795007979557*^9}, {
3.99379568990552*^9, 3.993795691164195*^9}, {3.993795875385445*^9,
3.99379588501084*^9}, {3.993797995002406*^9, 3.993797995597159*^9}, {
3.993798072981077*^9, 3.993798075654434*^9}, {3.9937986726317673`*^9,
3.9937987633828897`*^9}, {3.996019683105693*^9, 3.9960196851234617`*^9}, {
3.9960197207254753`*^9, 3.996019835558236*^9}, {3.996020358638421*^9,
3.996020431902809*^9}},
CellLabel->
"In[407]:=",ExpressionUUID->"351bbc0d-9f60-fb44-a3dd-8326f7c1a9b1"],
Cell[BoxData["2.027`"], "Output",
CellChangeTimes->{{3.99312071481172*^9, 3.993120733996957*^9},
3.993120778405978*^9, {3.993120808982645*^9, 3.993120917972237*^9},
3.993134742771702*^9, 3.993134997755999*^9, {3.9931350356393623`*^9,
3.9931350524140167`*^9}, {3.993765041622612*^9, 3.993765045540139*^9}, {
3.993794839003294*^9, 3.99379487284307*^9}, 3.993794932563972*^9,
3.993795020572113*^9, 3.993795700216778*^9, {3.993798060729582*^9,
3.9937980859991283`*^9}, 3.993798620911396*^9, {3.993798685866233*^9,
3.993798702104156*^9}, {3.993798732179296*^9, 3.993798771847027*^9},
3.993798841155717*^9, 3.993826323633601*^9, 3.99601968768934*^9, {
3.9960197225490913`*^9, 3.9960198377988863`*^9}, {3.996020361799699*^9,
3.9960204378503847`*^9}},
CellLabel->
"Out[407]=",ExpressionUUID->"ef417a2c-223f-4508-899b-e106a590f873"]
}, Open ]],
Cell[CellGroupData[{
etc........
```
Структура папок:
```stdout
./
├── 152-88_h_Pu240_6-7
│   ├── h_152-88_h_Pu240_6-7_gid_Qw1.nb
│   ├── h_152-88_h_Pu240_6-7_gid_Qw2.nb
│   ├── h_152-88_h_Pu240_6-7_osc_Qw1.nb
│   ├── h_152-88_h_Pu240_6-7_osc_Qw2.nb
│   ├── h_152-88_h_Pu240_6-7_pr_Qw1.nb
│   ├── h_152-88_h_Pu240_6-7_pr_Qw2.nb
│   ├── h_152-88_h_Pu240_6-7_фитирование.nb
│   └── rename.zsh
├── 154-86_h_Pu240_8-9
│   ├── h_154-86_Pu240_8-9_gid_Qw1.nb
│   ├── h_154-86_Pu240_8-9_gid_Qw2.nb
│   ├── h_154-86_Pu240_8-9_osc_Qw1.nb
│   ├── h_154-86_Pu240_8-9_osc_Qw2.nb
│   ├── h_154-86_Pu240_8-9_pr_Qw1.nb
│   ├── h_154-86_Pu240_8-9_pr_Qw2.nb
│   ├── h_154-86_Pu240_8-9_фитирование.nb
│   └── rename.zsh
├── 156-84_h_Pu240_10-11
│   ├── h_156-84_h_Pu240_10-11_gid_Qw1.nb
│   ├── h_156-84_h_Pu240_10-11_gid_Qw2.nb
│   ├── h_156-84_h_Pu240_10-11_osc_Qw1.nb
│   ├── h_156-84_h_Pu240_10-11_osc_Qw2.nb
│   ├── h_156-84_h_Pu240_10-11_pr_Qw1.nb
│   ├── h_156-84_h_Pu240_10-11_pr_Qw2.nb
│   ├── h_156-84_h_Pu240_10-11_фитирование.nb
│   └── rename.zsh
├── 158-82_h_Pu240_12-13
│   ├── h_158-82_h_Pu240_12-13_gid_Qw1.nb
│   ├── h_158-82_h_Pu240_12-13_gid_Qw2.nb
│   ├── h_158-82_h_Pu240_12-13_osc_Qw1.nb
│   ├── h_158-82_h_Pu240_12-13_osc_Qw2.nb
│   ├── h_158-82_h_Pu240_12-13_pr_Qw1.nb
│   ├── h_158-82_h_Pu240_12-13_pr_Qw2.nb
│   ├── h_158-82_h_Pu240_12-13_фитирование.nb
│   └── rename.zsh
├── 160-80_h_Pu240_14-15
│   ├── h_160-80_Pu240_14-15_gid_Qw1.nb
│   ├── h_160-80_Pu240_14-15_gid_Qw2.nb
│   ├── h_160-80_Pu240_14-15_osc_Qw1.nb
│   ├── h_160-80_Pu240_14-15_osc_Qw2.nb
│   ├── h_160-80_Pu240_14-15_pr_Qw1.nb
│   ├── h_160-80_Pu240_14-15_pr_Qw2.nb
│   ├── h_160-80_Pu240_14-15_фитирование.nb
│   └── rename.zsh
├── 162-78_h_Pu240_16-17
│   ├── h_162-78_Pu240_16-17_gid_Qw1.nb
│   ├── h_162-78_Pu240_16-17_gid_Qw2.nb
│   ├── h_162-78_Pu240_16-17_osc_Qw1.nb
│   ├── h_162-78_Pu240_16-17_osc_Qw2.nb
│   ├── h_162-78_Pu240_16-17_pr_Qw1.nb
│   ├── h_162-78_Pu240_16-17_pr_Qw2.nb
│   ├── h_162-78_Pu240_16-17_фитирование.nb
│   └── rename.zsh
├── 164-76_h_Pu240_18-19
│   ├── h_164-76_Pu240_18-19_gid_Qw1.nb
│   ├── h_164-76_Pu240_18-19_gid_Qw2.nb
│   ├── h_164-76_Pu240_18-19_osc_Qw1.nb
│   ├── h_164-76_Pu240_18-19_osc_Qw2.nb
│   ├── h_164-76_Pu240_18-19_pr_Qw1.nb
│   ├── h_164-76_Pu240_18-19_pr_Qw2.nb
│   ├── h_164-76_Pu240_18-19_фитирование.nb
│   └── rename.zsh
├── 166-74_h_Pu240_20-21
│   ├── h_166-74_Pu240_20-21_gid_Qw1.nb
│   ├── h_166-74_Pu240_20-21_gid_Qw2.nb
│   ├── h_166-74_Pu240_20-21_osc_Qw1.nb
│   ├── h_166-74_Pu240_20-21_osc_Qw2.nb
│   ├── h_166-74_Pu240_20-21_pr_Qw1.nb
│   ├── h_166-74_Pu240_20-21_pr_Qw2.nb
│   ├── h_166-74_Pu240_20-21_фитирование.nb
│   └── rename.zsh
├── 168-72_h_Pu240_22-23
│   ├── h_168-72_Pu240_22-23_gid_Qw1.nb
│   ├── h_168-72_Pu240_22-23_gid_Qw2.nb
│   ├── h_168-72_Pu240_22-23_osc_Qw1.nb
│   ├── h_168-72_Pu240_22-23_osc_Qw2.nb
│   ├── h_168-72_Pu240_22-23_pr_Qw1.nb
│   ├── h_168-72_Pu240_22-23_pr_Qw2.nb
│   ├── h_168-72_Pu240_22-23_фитирование.nb
│   └── rename.zsh
├── 170-70_h_Pu240_24-25
│   ├── h_170-70_Pu240_24-25_gid_Qw1.nb
│   ├── h_170-70_Pu240_24-25_gid_Qw2.nb
│   ├── h_170-70_Pu240_24-25_osc_Qw1.nb
│   ├── h_170-70_Pu240_24-25_osc_Qw2.nb
│   ├── h_170-70_Pu240_24-25_pr_Qw1.nb
│   ├── h_170-70_Pu240_24-25_pr_Qw2.nb
│   ├── h_170-70_Pu240_24-25_фитирование.nb
│   └── rename.zsh
├── 172-68_h_Pu240_26-27
│   ├── h_172-68_Pu240_26-27_gid_Qw1.nb
│   ├── h_172-68_Pu240_26-27_gid_Qw2.nb
│   ├── h_172-68_Pu240_26-27_osc_Qw1.nb
│   ├── h_172-68_Pu240_26-27_osc_Qw2.nb
│   ├── h_172-68_Pu240_26-27_pr_Qw1.nb
│   ├── h_172-68_Pu240_26-27_pr_Qw2.nb
│   ├── h_172-68_Pu240_26-27_фитирование.nb
│   └── rename.zsh
├── 174-66_h_Pu240_2-3
│   ├── h_174-66_Pu240_2-3_gid_Qw1.nb
│   ├── h_174-66_Pu240_2-3_gid_Qw2.nb
│   ├── h_174-66_Pu240_2-3_osc_Qw1.nb
│   ├── h_174-66_Pu240_2-3_osc_Qw2.nb
│   ├── h_174-66_Pu240_2-3_pr_Qw1.nb
│   ├── h_174-66_Pu240_2-3_pr_Qw2.nb
│   └── h_174-66_Pu240_2-3_фитирование.nb
├── 176-64_h_Pu240_4-5
│   ├── h_176-64_Pu240_4-5_gid_Qw1.nb
│   ├── h_176-64_Pu240_4-5_gid_Qw2.nb
│   ├── h_176-64_Pu240_4-5_osc_Qw1.nb
│   ├── h_176-64_Pu240_4-5_osc_Qw2.nb
│   ├── h_176-64_Pu240_4-5_pr_Qw1.nb
│   ├── h_176-64_Pu240_4-5_pr_Qw2.nb
│   ├── h_176-64_Pu240_4-5_фитирование.nb
│   └── rename.bat
├── result_table.xlsx
└── коэффициенты_Pu240_2-24.txt
```
Соответствие файла и значения "d" получается по принципу:
Пример 1:
- Файл: "h_154-86_Pu240_8-9_gid_Qw1.nb"
- Значение "d" из секции файла с коэфициентами: 154-86_8-9; значение "d" = 4.158
Пример 2:
- Файл: "h_152-88_h_Pu240_6-7_pr_Qw1.nb"
- Значение "d" из секции файла с коэфициентами: 152-88_6-7; значение "d" = 2.875
Исключения:
- если файл содержит в названии "фитирование", файл пропускается.
- если файл НЕ содержит в названии "фитирование" и в нем d не является самой первой переменной, файл пропускается и пишется в консоль соощение о пропущенном файле и его название.
Способ работы со скриптом:
запуск в bash с ключами/параметрами:
```bash
./insert_d_into_nb.py --coeff_file "коэфициенты.txt" --wolfram_notebooks .
```
Задача:
Поменять значения 'd' в файлах *.nb на значение из файла коэффициентов.