373 lines
13 KiB
Text
373 lines
13 KiB
Text
Ты 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 на значение из файла коэффициентов.
|