python_for_analytics

Форк
0
/
1.5._LEC_read_files.ipynb 
1208 строк · 26.1 Кб
1
{
2
 "cells": [
3
  {
4
   "cell_type": "markdown",
5
   "metadata": {},
6
   "source": [
7
    "# Работа с файлами\n",
8
    "- Обработать первые N строк файла\n",
9
    "- Прочитать файл из другой папки\n",
10
    "- Пример группировки большого файла cards.csv\n",
11
    "- Формат JSON\n",
12
    "- Кодировки файлов ([статья 1](https://tproger.ru/translations/unicode-and-encoding-python-guide/) и [статья 2](https://pythononline.ru/osnovy/encode-decode))"
13
   ]
14
  },
15
  {
16
   "cell_type": "markdown",
17
   "metadata": {},
18
   "source": [
19
    "### Работа с Экселем в питоне\n",
20
    "https://openpyxl.readthedocs.io/en/stable/"
21
   ]
22
  },
23
  {
24
   "cell_type": "markdown",
25
   "metadata": {},
26
   "source": [
27
    "# Когда файл лежит где-то"
28
   ]
29
  },
30
  {
31
   "cell_type": "code",
32
   "execution_count": null,
33
   "metadata": {},
34
   "outputs": [],
35
   "source": [
36
    "# вариант 1 - файл лежит рядом с кодом\n",
37
    "f = open('cards.csv')"
38
   ]
39
  },
40
  {
41
   "cell_type": "code",
42
   "execution_count": null,
43
   "metadata": {},
44
   "outputs": [],
45
   "source": [
46
    "# вариант 2 - файл лежит во вложенной папке рядом с кодом\n",
47
    "\n",
48
    "f = open('logs/hostlogs_part_5283.csv')"
49
   ]
50
  },
51
  {
52
   "cell_type": "code",
53
   "execution_count": 2,
54
   "metadata": {},
55
   "outputs": [],
56
   "source": [
57
    "# вариант 3 - файл лежит в произвольной папке где-то на компе\n",
58
    "\n",
59
    "# Mac, Linux, Ubuntu, FreeBSD, CentOS\n",
60
    "f = open('/Users/kbashevoy/Desktop/Нетология/Занятия/Занятие 5/logs/hostlogs_part_5284.csv')"
61
   ]
62
  },
63
  {
64
   "cell_type": "code",
65
   "execution_count": 3,
66
   "metadata": {},
67
   "outputs": [
68
    {
69
     "data": {
70
      "text/plain": [
71
       "'очень длинный текст'"
72
      ]
73
     },
74
     "execution_count": 3,
75
     "metadata": {},
76
     "output_type": "execute_result"
77
    }
78
   ],
79
   "source": [
80
    "text = 'очень длинный \\\n",
81
    "текст'\n",
82
    "\n",
83
    "text"
84
   ]
85
  },
86
  {
87
   "cell_type": "code",
88
   "execution_count": 4,
89
   "metadata": {},
90
   "outputs": [
91
    {
92
     "data": {
93
      "text/plain": [
94
       "'C:\\\\Users\\\\kbashevoy\\\\data.csv'"
95
      ]
96
     },
97
     "execution_count": 4,
98
     "metadata": {},
99
     "output_type": "execute_result"
100
    }
101
   ],
102
   "source": [
103
    "'C:\\\\Users\\\\kbashevoy\\\\data.csv'"
104
   ]
105
  },
106
  {
107
   "cell_type": "code",
108
   "execution_count": 7,
109
   "metadata": {},
110
   "outputs": [
111
    {
112
     "data": {
113
      "text/plain": [
114
       "\"select * from table where date='2023-01-23'\""
115
      ]
116
     },
117
     "execution_count": 7,
118
     "metadata": {},
119
     "output_type": "execute_result"
120
    }
121
   ],
122
   "source": [
123
    "'select * from table where date=\\'2023-01-23\\''"
124
   ]
125
  },
126
  {
127
   "cell_type": "code",
128
   "execution_count": null,
129
   "metadata": {},
130
   "outputs": [],
131
   "source": [
132
    "# Windows\n",
133
    "\n",
134
    "# 1 выход - экранирование - подсказка питону, что следующий символ это просто символ\n",
135
    "# символ экранирования - это тоже \\\n",
136
    "f = open('C:\\\\Users\\\\kbashevoy\\\\data.csv')\n",
137
    "\n",
138
    "# 2 выход - опция r\n",
139
    "f = open(r'C:\\Users\\kbashevoy\\data.csv')"
140
   ]
141
  },
142
  {
143
   "cell_type": "code",
144
   "execution_count": null,
145
   "metadata": {},
146
   "outputs": [],
147
   "source": [
148
    "import os"
149
   ]
150
  },
151
  {
152
   "cell_type": "code",
153
   "execution_count": null,
154
   "metadata": {},
155
   "outputs": [],
156
   "source": [
157
    "os.path.join('folder', 'data.csv')  # будет работать в любой ОС"
158
   ]
159
  },
160
  {
161
   "cell_type": "code",
162
   "execution_count": null,
163
   "metadata": {},
164
   "outputs": [],
165
   "source": [
166
    "open('folder/data.csv')"
167
   ]
168
  },
169
  {
170
   "cell_type": "markdown",
171
   "metadata": {},
172
   "source": [
173
    "# Чтение файлов построчно и группировка\n",
174
    "- Читать файл целиком (текстовые редакторы/Эксель)\n",
175
    "- Построчное чтение - расход оперативной памяти обычно близок к 0"
176
   ]
177
  },
178
  {
179
   "cell_type": "code",
180
   "execution_count": null,
181
   "metadata": {},
182
   "outputs": [],
183
   "source": [
184
    "f = open('cards.csv')\n",
185
    "\n",
186
    "f.close()"
187
   ]
188
  },
189
  {
190
   "cell_type": "code",
191
   "execution_count": 19,
192
   "metadata": {},
193
   "outputs": [
194
    {
195
     "data": {
196
      "text/plain": [
197
       "{'червы': 3, 'бубны': 0}"
198
      ]
199
     },
200
     "execution_count": 19,
201
     "metadata": {},
202
     "output_type": "execute_result"
203
    }
204
   ],
205
   "source": [
206
    "stats = {'червы': 3}  # {'червы': 3, 'пики': 1, 'бубны': 1}\n",
207
    "\n",
208
    "stats.setdefault('червы', 0)\n",
209
    "stats.setdefault('бубны', 0)\n",
210
    "stats"
211
   ]
212
  },
213
  {
214
   "cell_type": "code",
215
   "execution_count": 24,
216
   "metadata": {},
217
   "outputs": [
218
    {
219
     "name": "stdout",
220
     "output_type": "stream",
221
     "text": [
222
      "0 червы\n",
223
      "1 пики\n",
224
      "2 червы\n",
225
      "3 бубны\n",
226
      "4 червы\n",
227
      "5 пики\n",
228
      "6 трефы\n"
229
     ]
230
    },
231
    {
232
     "data": {
233
      "text/plain": [
234
       "{'червы': 3, 'пики': 2, 'бубны': 1, 'трефы': 1}"
235
      ]
236
     },
237
     "execution_count": 24,
238
     "metadata": {},
239
     "output_type": "execute_result"
240
    }
241
   ],
242
   "source": [
243
    "stats = {}\n",
244
    "\n",
245
    "with open('cards.csv') as f:\n",
246
    "    # content = f.readlines()  # получаем список - это НЕ построчное чтение\n",
247
    "    \n",
248
    "    for i, line in enumerate(f):  # построчное чтение\n",
249
    "        line = line.strip().split(',')\n",
250
    "        \n",
251
    "        suit, _ = line  # если в списке line точно два значения\n",
252
    "        # suit = line[0]\n",
253
    "        # value = line[1]\n",
254
    "        \n",
255
    "        print(i, suit)\n",
256
    "        \n",
257
    "        stats.setdefault(suit, 0)\n",
258
    "        stats[suit] += 1\n",
259
    "#         if suit in stats:\n",
260
    "#             stats[suit] += 1\n",
261
    "#         else:\n",
262
    "#             stats[suit] = 1\n",
263
    "        \n",
264
    "        if i > 5:\n",
265
    "            break\n",
266
    "            \n",
267
    "stats"
268
   ]
269
  },
270
  {
271
   "cell_type": "code",
272
   "execution_count": 28,
273
   "metadata": {},
274
   "outputs": [
275
    {
276
     "data": {
277
      "text/plain": [
278
       "['червы', 'пики', 'червы', 'бубны', 'червы']"
279
      ]
280
     },
281
     "execution_count": 28,
282
     "metadata": {},
283
     "output_type": "execute_result"
284
    }
285
   ],
286
   "source": [
287
    "f = open('cards.csv')\n",
288
    "\n",
289
    "suits_list = [x.strip().split(',')[0] for x in f]\n",
290
    "suits_list[:5]"
291
   ]
292
  },
293
  {
294
   "cell_type": "code",
295
   "execution_count": 29,
296
   "metadata": {},
297
   "outputs": [],
298
   "source": [
299
    "from collections import Counter"
300
   ]
301
  },
302
  {
303
   "cell_type": "code",
304
   "execution_count": 30,
305
   "metadata": {},
306
   "outputs": [
307
    {
308
     "data": {
309
      "text/plain": [
310
       "Counter({'червы': 25020, 'пики': 24934, 'бубны': 24932, 'трефы': 25114})"
311
      ]
312
     },
313
     "execution_count": 30,
314
     "metadata": {},
315
     "output_type": "execute_result"
316
    }
317
   ],
318
   "source": [
319
    "Counter(suits_list)"
320
   ]
321
  },
322
  {
323
   "cell_type": "code",
324
   "execution_count": 31,
325
   "metadata": {},
326
   "outputs": [],
327
   "source": [
328
    "import pandas as pd"
329
   ]
330
  },
331
  {
332
   "cell_type": "code",
333
   "execution_count": 34,
334
   "metadata": {},
335
   "outputs": [
336
    {
337
     "data": {
338
      "text/plain": [
339
       "трефы    25114\n",
340
       "червы    25020\n",
341
       "пики     24934\n",
342
       "бубны    24932\n",
343
       "Name: suit, dtype: int64"
344
      ]
345
     },
346
     "execution_count": 34,
347
     "metadata": {},
348
     "output_type": "execute_result"
349
    }
350
   ],
351
   "source": [
352
    "pd.read_csv('cards.csv', names=['suit', 'value'])['suit'].value_counts()"
353
   ]
354
  },
355
  {
356
   "cell_type": "markdown",
357
   "metadata": {},
358
   "source": [
359
    "# Кодировки\n",
360
    "1. Указать кодировку при открытии / записи в файл\n",
361
    "```python\n",
362
    "open('data.csv', mode='w', encoding='utf-8')  # Windows-1251 --> encoding='cp1251'\n",
363
    "```\n",
364
    "2. Текстовый редактор открывает ваш результат криво.\n",
365
    "3. Эксель\n",
366
    "4. Русские буквы в составе списков и словарей."
367
   ]
368
  },
369
  {
370
   "cell_type": "code",
371
   "execution_count": 37,
372
   "metadata": {},
373
   "outputs": [],
374
   "source": [
375
    "data = ['Москва', 'Питер']"
376
   ]
377
  },
378
  {
379
   "cell_type": "code",
380
   "execution_count": 38,
381
   "metadata": {},
382
   "outputs": [],
383
   "source": [
384
    "import json"
385
   ]
386
  },
387
  {
388
   "cell_type": "code",
389
   "execution_count": 40,
390
   "metadata": {},
391
   "outputs": [
392
    {
393
     "data": {
394
      "text/plain": [
395
       "'[\"Москва\", \"Питер\"]'"
396
      ]
397
     },
398
     "execution_count": 40,
399
     "metadata": {},
400
     "output_type": "execute_result"
401
    }
402
   ],
403
   "source": [
404
    "json.dumps(data, ensure_ascii=False)"
405
   ]
406
  },
407
  {
408
   "cell_type": "code",
409
   "execution_count": null,
410
   "metadata": {},
411
   "outputs": [],
412
   "source": [
413
    "0010010101010100101"
414
   ]
415
  },
416
  {
417
   "cell_type": "code",
418
   "execution_count": 35,
419
   "metadata": {},
420
   "outputs": [
421
    {
422
     "data": {
423
      "text/plain": [
424
       "65"
425
      ]
426
     },
427
     "execution_count": 35,
428
     "metadata": {},
429
     "output_type": "execute_result"
430
    }
431
   ],
432
   "source": [
433
    "# ASCII\n",
434
    "\n",
435
    "ord('A')"
436
   ]
437
  },
438
  {
439
   "cell_type": "code",
440
   "execution_count": 36,
441
   "metadata": {},
442
   "outputs": [
443
    {
444
     "data": {
445
      "text/plain": [
446
       "'A'"
447
      ]
448
     },
449
     "execution_count": 36,
450
     "metadata": {},
451
     "output_type": "execute_result"
452
    }
453
   ],
454
   "source": [
455
    "chr(65)"
456
   ]
457
  },
458
  {
459
   "cell_type": "markdown",
460
   "metadata": {},
461
   "source": [
462
    "UNICODE"
463
   ]
464
  },
465
  {
466
   "cell_type": "code",
467
   "execution_count": null,
468
   "metadata": {},
469
   "outputs": [],
470
   "source": []
471
  },
472
  {
473
   "cell_type": "code",
474
   "execution_count": null,
475
   "metadata": {},
476
   "outputs": [],
477
   "source": []
478
  },
479
  {
480
   "cell_type": "code",
481
   "execution_count": null,
482
   "metadata": {},
483
   "outputs": [],
484
   "source": []
485
  },
486
  {
487
   "cell_type": "markdown",
488
   "metadata": {},
489
   "source": [
490
    "Опции при открытии файлов:\n",
491
    "- 'r' открыть для чтения. Файл при этом не меняется\n",
492
    "- 'w' открыть файл для записи. Файл при этом полностью чистится (!)\n",
493
    "- 'a' открыть файл для добавления. Файл не меняется, все записи добавляются в конец"
494
   ]
495
  },
496
  {
497
   "cell_type": "code",
498
   "execution_count": null,
499
   "metadata": {},
500
   "outputs": [],
501
   "source": [
502
    "# открываем файл для чтения (опция r)\n",
503
    "f = open('visit_log.csv', 'r')"
504
   ]
505
  },
506
  {
507
   "cell_type": "code",
508
   "execution_count": null,
509
   "metadata": {},
510
   "outputs": [],
511
   "source": []
512
  },
513
  {
514
   "cell_type": "code",
515
   "execution_count": null,
516
   "metadata": {},
517
   "outputs": [],
518
   "source": []
519
  },
520
  {
521
   "cell_type": "code",
522
   "execution_count": null,
523
   "metadata": {},
524
   "outputs": [],
525
   "source": []
526
  },
527
  {
528
   "cell_type": "code",
529
   "execution_count": null,
530
   "metadata": {
531
    "scrolled": true
532
   },
533
   "outputs": [],
534
   "source": [
535
    "# прочитать первую строчку\n",
536
    "f.readline()"
537
   ]
538
  },
539
  {
540
   "cell_type": "code",
541
   "execution_count": null,
542
   "metadata": {},
543
   "outputs": [],
544
   "source": [
545
    "# прочитать еще одну\n",
546
    "f.readline()"
547
   ]
548
  },
549
  {
550
   "cell_type": "code",
551
   "execution_count": null,
552
   "metadata": {},
553
   "outputs": [],
554
   "source": [
555
    "# можно и так\n",
556
    "next(f)"
557
   ]
558
  },
559
  {
560
   "cell_type": "code",
561
   "execution_count": null,
562
   "metadata": {},
563
   "outputs": [],
564
   "source": [
565
    "# прочитать все содержимое файла в переменную content\n",
566
    "content = f.readlines()"
567
   ]
568
  },
569
  {
570
   "cell_type": "code",
571
   "execution_count": null,
572
   "metadata": {},
573
   "outputs": [],
574
   "source": [
575
    "content[:5]"
576
   ]
577
  },
578
  {
579
   "cell_type": "code",
580
   "execution_count": null,
581
   "metadata": {},
582
   "outputs": [],
583
   "source": [
584
    "# построчное чтение файла\n",
585
    "for line in f:\n",
586
    "    print(line)\n",
587
    "    \n",
588
    "    break"
589
   ]
590
  },
591
  {
592
   "cell_type": "markdown",
593
   "metadata": {},
594
   "source": [
595
    "Часто используется конструкция \n",
596
    "```python\n",
597
    "another_line.strip().split(',')\n",
598
    "```"
599
   ]
600
  },
601
  {
602
   "cell_type": "code",
603
   "execution_count": null,
604
   "metadata": {},
605
   "outputs": [],
606
   "source": [
607
    "another_line = f.readline()\n",
608
    "another_line"
609
   ]
610
  },
611
  {
612
   "cell_type": "code",
613
   "execution_count": null,
614
   "metadata": {},
615
   "outputs": [],
616
   "source": [
617
    "# удаляем перенос строки и лишние пробелы\n",
618
    "another_line.strip()"
619
   ]
620
  },
621
  {
622
   "cell_type": "code",
623
   "execution_count": null,
624
   "metadata": {},
625
   "outputs": [],
626
   "source": [
627
    "# разбиваем столбцы\n",
628
    "another_line.strip().split(',')"
629
   ]
630
  },
631
  {
632
   "cell_type": "code",
633
   "execution_count": null,
634
   "metadata": {},
635
   "outputs": [],
636
   "source": [
637
    "# закрытие файла\n",
638
    "f.close()"
639
   ]
640
  },
641
  {
642
   "cell_type": "code",
643
   "execution_count": null,
644
   "metadata": {},
645
   "outputs": [],
646
   "source": [
647
    "# после закрытия не получится прочитать\n",
648
    "f.readline()"
649
   ]
650
  },
651
  {
652
   "cell_type": "code",
653
   "execution_count": null,
654
   "metadata": {},
655
   "outputs": [],
656
   "source": [
657
    "# прочитать все строчки файла в список (т. е. в оперативную память)\n",
658
    "f = open('visit_log.csv', 'r')\n",
659
    "\n",
660
    "content = f.readlines()\n",
661
    "\n",
662
    "f.close()"
663
   ]
664
  },
665
  {
666
   "cell_type": "code",
667
   "execution_count": null,
668
   "metadata": {},
669
   "outputs": [],
670
   "source": [
671
    "content[:5]"
672
   ]
673
  },
674
  {
675
   "cell_type": "code",
676
   "execution_count": null,
677
   "metadata": {},
678
   "outputs": [],
679
   "source": []
680
  },
681
  {
682
   "cell_type": "code",
683
   "execution_count": null,
684
   "metadata": {},
685
   "outputs": [],
686
   "source": [
687
    "f = open('results.csv', 'w')"
688
   ]
689
  },
690
  {
691
   "cell_type": "code",
692
   "execution_count": null,
693
   "metadata": {},
694
   "outputs": [],
695
   "source": [
696
    "f.write('Начинаю запись первой строки...\\n')"
697
   ]
698
  },
699
  {
700
   "cell_type": "code",
701
   "execution_count": null,
702
   "metadata": {},
703
   "outputs": [],
704
   "source": [
705
    "f.write('Начинаю запись второй строки...\\n')"
706
   ]
707
  },
708
  {
709
   "cell_type": "markdown",
710
   "metadata": {},
711
   "source": [
712
    "Здесь кто-то еще хочет в него записать"
713
   ]
714
  },
715
  {
716
   "cell_type": "code",
717
   "execution_count": null,
718
   "metadata": {},
719
   "outputs": [],
720
   "source": [
721
    "my_friend_results = open('results.csv', 'w')"
722
   ]
723
  },
724
  {
725
   "cell_type": "code",
726
   "execution_count": null,
727
   "metadata": {},
728
   "outputs": [],
729
   "source": [
730
    "my_friend_results.write('Тут еще результаты есть')"
731
   ]
732
  },
733
  {
734
   "cell_type": "code",
735
   "execution_count": null,
736
   "metadata": {},
737
   "outputs": [],
738
   "source": [
739
    "# пишем свой результат\n",
740
    "f.close()"
741
   ]
742
  },
743
  {
744
   "cell_type": "code",
745
   "execution_count": null,
746
   "metadata": {},
747
   "outputs": [],
748
   "source": [
749
    "# и наш результат перезатирается\n",
750
    "my_friend_results.close()"
751
   ]
752
  },
753
  {
754
   "cell_type": "markdown",
755
   "metadata": {},
756
   "source": [
757
    "### Контекстный менеджер\n",
758
    "Как обезопасить себя от подобных накладок"
759
   ]
760
  },
761
  {
762
   "cell_type": "code",
763
   "execution_count": null,
764
   "metadata": {},
765
   "outputs": [],
766
   "source": [
767
    "with open('results.csv', 'w') as f:\n",
768
    "    f.write('Начинаю запись первой строки...\\n')\n",
769
    "    f.write('Начинаю запись второй строки...\\n')\n",
770
    "    \n",
771
    "    my_friend_results = open('results.csv', 'w')\n",
772
    "    my_friend_results.write('Тут еще результаты есть')\n",
773
    "    my_friend_results.close()"
774
   ]
775
  },
776
  {
777
   "cell_type": "markdown",
778
   "metadata": {},
779
   "source": [
780
    "### А можно читать и сразу в файл записывать?\n",
781
    "Напишите функцию, которая фильтрует файл visit_log.csv по источнику context и пишет результат в visits_context.csv. Используйте функцию из второго упражнения для проверки результата."
782
   ]
783
  },
784
  {
785
   "cell_type": "code",
786
   "execution_count": null,
787
   "metadata": {},
788
   "outputs": [],
789
   "source": []
790
  },
791
  {
792
   "cell_type": "code",
793
   "execution_count": null,
794
   "metadata": {},
795
   "outputs": [],
796
   "source": []
797
  },
798
  {
799
   "cell_type": "code",
800
   "execution_count": null,
801
   "metadata": {},
802
   "outputs": [],
803
   "source": []
804
  },
805
  {
806
   "cell_type": "markdown",
807
   "metadata": {},
808
   "source": [
809
    "# Чтение списков и словарей из файла\n",
810
    "Смотрим что в файле purchase_log.txt. Похоже тут не строки, а словари"
811
   ]
812
  },
813
  {
814
   "cell_type": "code",
815
   "execution_count": null,
816
   "metadata": {},
817
   "outputs": [],
818
   "source": [
819
    "with open('purchase_log.txt') as f:\n",
820
    "    print([next(f) for x in range(5)])"
821
   ]
822
  },
823
  {
824
   "cell_type": "code",
825
   "execution_count": null,
826
   "metadata": {},
827
   "outputs": [],
828
   "source": [
829
    "import json"
830
   ]
831
  },
832
  {
833
   "cell_type": "code",
834
   "execution_count": null,
835
   "metadata": {},
836
   "outputs": [],
837
   "source": [
838
    "# перевод строки в словарь\n",
839
    "dict_in_string = '{\"a\": 1, \"b\": 2}'\n",
840
    "\n",
841
    "type(json.loads(dict_in_string))"
842
   ]
843
  },
844
  {
845
   "cell_type": "code",
846
   "execution_count": null,
847
   "metadata": {},
848
   "outputs": [],
849
   "source": [
850
    "# перевод строки в список\n",
851
    "list_in_string = '[1, 2, 3]'\n",
852
    "\n",
853
    "json.loads(list_in_string)[-1]"
854
   ]
855
  },
856
  {
857
   "cell_type": "code",
858
   "execution_count": null,
859
   "metadata": {},
860
   "outputs": [],
861
   "source": [
862
    "i = 0\n",
863
    "with open('purchase_log.txt') as f:\n",
864
    "    for line in f:\n",
865
    "        line = line.strip()\n",
866
    "        \n",
867
    "        dict_ = json.loads(line)\n",
868
    "        print(dict_, type(dict_))\n",
869
    "        \n",
870
    "        i += 1\n",
871
    "        if i > 5:\n",
872
    "            break"
873
   ]
874
  },
875
  {
876
   "cell_type": "markdown",
877
   "metadata": {},
878
   "source": [
879
    "### Из словаря в строку тоже можно"
880
   ]
881
  },
882
  {
883
   "cell_type": "code",
884
   "execution_count": null,
885
   "metadata": {},
886
   "outputs": [],
887
   "source": [
888
    "data = {'user_id': '1840e0b9d4', 'category': 'Продукты'}"
889
   ]
890
  },
891
  {
892
   "cell_type": "code",
893
   "execution_count": null,
894
   "metadata": {
895
    "scrolled": true
896
   },
897
   "outputs": [],
898
   "source": [
899
    "json.dumps(data)"
900
   ]
901
  },
902
  {
903
   "cell_type": "code",
904
   "execution_count": null,
905
   "metadata": {},
906
   "outputs": [],
907
   "source": [
908
    "type(json.dumps(data))"
909
   ]
910
  },
911
  {
912
   "cell_type": "markdown",
913
   "metadata": {},
914
   "source": [
915
    "# Модуль pickle\n",
916
    "Запись объекта сразу в файл как поток байтов"
917
   ]
918
  },
919
  {
920
   "cell_type": "code",
921
   "execution_count": null,
922
   "metadata": {},
923
   "outputs": [],
924
   "source": [
925
    "import pickle"
926
   ]
927
  },
928
  {
929
   "cell_type": "code",
930
   "execution_count": null,
931
   "metadata": {},
932
   "outputs": [],
933
   "source": [
934
    "data = {'user_id': '1840e0b9d4', 'category': 'Продукты'}"
935
   ]
936
  },
937
  {
938
   "cell_type": "code",
939
   "execution_count": null,
940
   "metadata": {},
941
   "outputs": [],
942
   "source": [
943
    "with open('data.pickle', 'wb') as f:\n",
944
    "    pickle.dump(data, f)"
945
   ]
946
  },
947
  {
948
   "cell_type": "code",
949
   "execution_count": null,
950
   "metadata": {},
951
   "outputs": [],
952
   "source": [
953
    "# прочитать объект из такого файла\n",
954
    "\n",
955
    "with open('data.pickle', 'rb') as f:\n",
956
    "    dict_ = pickle.load(f)\n",
957
    "    \n",
958
    "dict_, dict_['user_id']"
959
   ]
960
  },
961
  {
962
   "cell_type": "markdown",
963
   "metadata": {},
964
   "source": [
965
    "# Чтение файлов из папки"
966
   ]
967
  },
968
  {
969
   "cell_type": "code",
970
   "execution_count": null,
971
   "metadata": {},
972
   "outputs": [],
973
   "source": [
974
    "import os"
975
   ]
976
  },
977
  {
978
   "cell_type": "code",
979
   "execution_count": null,
980
   "metadata": {},
981
   "outputs": [],
982
   "source": [
983
    "# чтение файлов и папок\n",
984
    "for file in os.listdir('data'):\n",
985
    "    print(file)"
986
   ]
987
  },
988
  {
989
   "cell_type": "code",
990
   "execution_count": null,
991
   "metadata": {},
992
   "outputs": [],
993
   "source": [
994
    "# чтение всех файлов и папок, в том числе вложенных\n",
995
    "for root, directory, file in os.walk('data'):\n",
996
    "    print(root, directory, file)"
997
   ]
998
  },
999
  {
1000
   "cell_type": "markdown",
1001
   "metadata": {},
1002
   "source": [
1003
    "# Каталог пакетов pip (Python Package Index)\n",
1004
    "Варианты установки\n",
1005
    "1. С помощью Anaconda Navigator\n",
1006
    "2. В командной строке (Terminal на маке)\n",
1007
    "```bash\n",
1008
    "pip install package_name\n",
1009
    "```\n",
1010
    "3. Скачать версию с github и установить вручную\n",
1011
    "```bash\n",
1012
    "pip install .\n",
1013
    "```\n",
1014
    "\n",
1015
    "Пакеты устанавливаются в определенное окружение! Вам пригодится virtualenv"
1016
   ]
1017
  },
1018
  {
1019
   "cell_type": "code",
1020
   "execution_count": null,
1021
   "metadata": {},
1022
   "outputs": [],
1023
   "source": [
1024
    "!pip install pyyaml"
1025
   ]
1026
  },
1027
  {
1028
   "cell_type": "code",
1029
   "execution_count": null,
1030
   "metadata": {},
1031
   "outputs": [],
1032
   "source": [
1033
    "import plotly"
1034
   ]
1035
  },
1036
  {
1037
   "cell_type": "markdown",
1038
   "metadata": {},
1039
   "source": [
1040
    "# Простой импорт"
1041
   ]
1042
  },
1043
  {
1044
   "cell_type": "code",
1045
   "execution_count": null,
1046
   "metadata": {},
1047
   "outputs": [],
1048
   "source": [
1049
    "import sys\n",
1050
    "sys.path"
1051
   ]
1052
  },
1053
  {
1054
   "cell_type": "code",
1055
   "execution_count": null,
1056
   "metadata": {},
1057
   "outputs": [],
1058
   "source": [
1059
    "# добавляем в список библиотек папку libs\n",
1060
    "sys.path.append('libs')\n",
1061
    "sys.path"
1062
   ]
1063
  },
1064
  {
1065
   "cell_type": "code",
1066
   "execution_count": null,
1067
   "metadata": {},
1068
   "outputs": [],
1069
   "source": [
1070
    "from useful_codes import CATEGORIES"
1071
   ]
1072
  },
1073
  {
1074
   "cell_type": "code",
1075
   "execution_count": null,
1076
   "metadata": {},
1077
   "outputs": [],
1078
   "source": [
1079
    "CATEGORIES"
1080
   ]
1081
  },
1082
  {
1083
   "cell_type": "code",
1084
   "execution_count": null,
1085
   "metadata": {},
1086
   "outputs": [],
1087
   "source": [
1088
    "from useful_codes import word_count"
1089
   ]
1090
  },
1091
  {
1092
   "cell_type": "code",
1093
   "execution_count": null,
1094
   "metadata": {},
1095
   "outputs": [],
1096
   "source": [
1097
    "# посмотреть документацию функции\n",
1098
    "\n",
1099
    "?word_count"
1100
   ]
1101
  },
1102
  {
1103
   "cell_type": "code",
1104
   "execution_count": null,
1105
   "metadata": {},
1106
   "outputs": [],
1107
   "source": [
1108
    "word_count('Посчитай количество слов в тексте')"
1109
   ]
1110
  },
1111
  {
1112
   "cell_type": "markdown",
1113
   "metadata": {},
1114
   "source": [
1115
    "# Домашнее задание\n",
1116
    "1. Переведите содержимое файла purchase_log.txt в словарь purchases вида:\n",
1117
    "```python\n",
1118
    "{'1840e0b9d4': 'Продукты', ...}\n",
1119
    "```\n",
1120
    "\n",
1121
    "2. Для каждого user_id в файле visit_log.csv определите третий столбец с категорией покупки (если покупка была, сам файл visit_log.csv изменять не надо). Запишите в файл funnel.csv визиты из файла visit_log.csv, в которых были покупки с указанием категории.\n",
1122
    "\n",
1123
    "Учтите условия на данные:\n",
1124
    "- содержимое purchase_log.txt помещается в оперативную память компьютера\n",
1125
    "- содержимое visit_log.csv - нет; используйте только построчную обработку этого файла"
1126
   ]
1127
  },
1128
  {
1129
   "cell_type": "markdown",
1130
   "metadata": {},
1131
   "source": [
1132
    "Используйте метод json.loads()"
1133
   ]
1134
  },
1135
  {
1136
   "cell_type": "code",
1137
   "execution_count": 41,
1138
   "metadata": {},
1139
   "outputs": [
1140
    {
1141
     "data": {
1142
      "text/plain": [
1143
       "20000000000"
1144
      ]
1145
     },
1146
     "execution_count": 41,
1147
     "metadata": {},
1148
     "output_type": "execute_result"
1149
    }
1150
   ],
1151
   "source": [
1152
    "200000 * 100000"
1153
   ]
1154
  },
1155
  {
1156
   "cell_type": "code",
1157
   "execution_count": null,
1158
   "metadata": {},
1159
   "outputs": [],
1160
   "source": [
1161
    "for line in visit_log:\n",
1162
    "    if user_id in purchases:  # за секунду"
1163
   ]
1164
  },
1165
  {
1166
   "cell_type": "code",
1167
   "execution_count": null,
1168
   "metadata": {},
1169
   "outputs": [],
1170
   "source": []
1171
  },
1172
  {
1173
   "cell_type": "code",
1174
   "execution_count": null,
1175
   "metadata": {},
1176
   "outputs": [],
1177
   "source": []
1178
  },
1179
  {
1180
   "cell_type": "code",
1181
   "execution_count": null,
1182
   "metadata": {},
1183
   "outputs": [],
1184
   "source": []
1185
  }
1186
 ],
1187
 "metadata": {
1188
  "kernelspec": {
1189
   "display_name": "Python 3 (ipykernel)",
1190
   "language": "python",
1191
   "name": "python3"
1192
  },
1193
  "language_info": {
1194
   "codemirror_mode": {
1195
    "name": "ipython",
1196
    "version": 3
1197
   },
1198
   "file_extension": ".py",
1199
   "mimetype": "text/x-python",
1200
   "name": "python",
1201
   "nbconvert_exporter": "python",
1202
   "pygments_lexer": "ipython3",
1203
   "version": "3.9.13"
1204
  }
1205
 },
1206
 "nbformat": 4,
1207
 "nbformat_minor": 2
1208
}
1209

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.