
Tishka17
14.12.2018
10:18:27

Alex
14.12.2018
10:19:10

Yegor
14.12.2018
10:19:12
нифига не понял, сейчас буду внимательно читать

Tishka17
14.12.2018
10:19:37

Google

Alex
14.12.2018
10:20:07
да тут ленивость вся идет лесом, так как результат джойна - строка.

Tishka17
14.12.2018
10:20:19
ок

Alex
14.12.2018
10:21:10
с точки зрения памяти это возможно и эффективнее чем вычитывать все файлы сразу и делать джоин... (хотя тут тоже интересный вопрос)

Tishka17
14.12.2018
10:21:57
def lines(fname):
with open(fname) as f:
yield from f
first=True
for line in itertools.chain.from_iterable(
lines(os.path.join(companies_temp_folder, filename)) for filename in os.listdir(companies_temp_folder)
):
if not first:
json_file.write(‘,’)
json_file.write(line)
first = False

Alex
14.12.2018
10:21:58
чтобы это понять надо заглубиться в сорцы join(). ибо внутри он может сначала вычитывать всю итерируемую последовательность и потом зная их длины аллоцировать результирующий буфер

Tishka17
14.12.2018
10:22:07
в том коде ещё и пустые файлы не обрабатвались
вот максимально лениво вам
даже на гиганстких файлах должно

Alex
14.12.2018
10:24:09
кстати отвлекаясь от задачи

Yegor
14.12.2018
10:24:38
Это какой-то ужас
дядьки

Tishka17
14.12.2018
10:24:40
чем?

Google

Yegor
14.12.2018
10:24:44
как вы это пишете???

Alex
14.12.2018
10:24:49

Yegor
14.12.2018
10:25:22
По итогу работает так:
def lines(fname):
with open(fname) as f:
yield from f
json_file.write('[')
json_file.write(",\n".join(itertools.chain.from_iterable(
lines(os.path.join(companies_temp_folder, filename)) for filename in os.listdir(companies_temp_folder)
)))
json_file.write(']')
json_file.close()

Alex
14.12.2018
10:25:45
чем?
тем что ты открываешь файл внутри генератора. если генератор не будет вычитан полностью, открытый дескриптор повиснет до конца жизни генератора.

Tishka17
14.12.2018
10:25:57
ну это да

Yegor
14.12.2018
10:26:00
герераторы, кстате работают почти в два раза быстрее

LighteR
14.12.2018
10:26:08
Омг, вы до сих пор решаете задачу с json-строками в файле?

Tishka17
14.12.2018
10:26:10

Yegor
14.12.2018
10:26:15
но я них нереально туп
ща видос найду

Alex
14.12.2018
10:27:01

Yegor
14.12.2018
10:27:14
https://www.youtube.com/watch?v=Ss1M32pp5Ew
вот буквально пару минут назад смотрел

Andrew
14.12.2018
10:27:54

Yegor
14.12.2018
10:28:22
а время засекает декоратором

Andrew
14.12.2018
10:29:01

Danil
14.12.2018
10:29:12
Подскажите, а есть туториал по юзер агентам? Что и как называется, где минор, патч и т.д. А то я искал в интернете - и ничего не нашел

Yegor
14.12.2018
10:29:16

Tishka17
14.12.2018
10:29:35
какйо минор, патч?

Google

Tishka17
14.12.2018
10:29:37
вы о чем?

Alex
14.12.2018
10:29:40

Yegor
14.12.2018
10:29:59
знаю только User-Agent и хереров в хтмл)))

Alex
14.12.2018
10:30:01

Yegor
14.12.2018
10:30:26
Ааа так это оно и есть?

Alex
14.12.2018
10:30:55
ну не совсем любой, но в общем случае.

Danil
14.12.2018
10:31:07
смотрите, если мы возьмем такую строку:
"Mozilla/5.0 (Linux; Android 8.0.0; HWV32 Build/HUAWEI-HWV32; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36". Есть парсер для питона, библиотека. На выходе мы получим:

Alex
14.12.2018
10:31:15
опять же формат версий кажется не стандартизирован

Danil
14.12.2018
10:31:23
я понимаю что все написано на регулярках, но он же понимает что есть что. Значит есть какая-то структура в юзерагенте, по идее

Alex
14.12.2018
10:32:28
major, minor, patch - так называются значимые части version string
Googlebot/2.1 (+http://www.google.com/bot.html)
вот смотри, это тоже валидный User-Agent
да, структура есть
User-Agent: <product> / <product-version> <comment>
но все что выходит за рамки этого формата - не стандартизированно

Tishka17
14.12.2018
10:34:54

Сергей
14.12.2018
10:35:50

Danil
14.12.2018
10:36:08

Alex
14.12.2018
10:36:47
может быть 1 или более элементов вида Product Token или Comment

Сергей
14.12.2018
10:37:42

Google

Alex
14.12.2018
10:37:57

Сергей
14.12.2018
10:38:22
я его давно смотрел, мельком промотал, вспомнил
Кстати, для новичков полезно Молчанова смотреть, он достаточно подробно разжевывает многие вещи и не тонет в мелочах (кому трудно читать книги)

Yegor
14.12.2018
10:40:16
Блин как можно так все знать?

Alex
14.12.2018
10:40:38
брюзжание старого программиста: вот и подросло поколение, которому трудно читать книги

Yegor
14.12.2018
10:40:39
Сейчас молчанова поищу
Мне не трудно читать, мне реально некогда

Сергей
14.12.2018
10:41:55
Блин как можно так все знать?
Все знать не возможно, самый умный человек в этом чате вряд ли знает более 1% от It, нужно правильно выбирать приоритеты

LighteR
14.12.2018
10:42:06

Alex
14.12.2018
10:42:10
мне вегда казалось что чтение гораздо менее времязатратно чем просматривание роликов

Yegor
14.12.2018
10:42:26
Я в свое время по Django три книги прочел, но по питону ума они сильно не добавляли

LighteR
14.12.2018
10:43:44

Сергей
14.12.2018
10:44:08

Alex
14.12.2018
10:45:17

Yegor
14.12.2018
10:46:05

Alex
14.12.2018
10:46:07

Tishka17
14.12.2018
10:46:27
"User-Agent" ":" 1*( product | comment )
это как?

Alex
14.12.2018
10:46:36
по туториалу джанги можно рабочий todo list собрать.... и человек проходит как ты выразился через все стадии

Google

Tishka17
14.12.2018
10:46:43
типа или?

Alex
14.12.2018
10:46:54
1* - значит один или более
(product | comment) - или продукт или комментарий
комментарий по стандарту должен идти в скобках

Yegor
14.12.2018
10:48:47

Сергей
14.12.2018
10:48:47

Alex
14.12.2018
10:49:28
продукт - это токен + опционально версия (тоже токен)
product = token ["/" product-version]
product-version = token
а токен - это почти любой символ за исключением контрольных символов и разделителей.

LighteR
14.12.2018
10:51:27

Сергей
14.12.2018
10:51:34

Alex
14.12.2018
10:52:03

Yegor
14.12.2018
10:53:08
я самоучка, учусь практикуясь)))

LighteR
14.12.2018
10:53:11

Yegor
14.12.2018
10:53:38
Нету ли в питоне какой-нибудь примочки, которая бы показала сколько кода я наворотил?

Alex
14.12.2018
10:53:55

Сергей
14.12.2018
10:54:36
я самоучка, учусь практикуясь)))
правильный путь, который, к сожалению игнорируют многие начинающие. Обязательно одновременно делать что-то свое. Иногда полезно написать свой небольшой проект и узнавая что-то новое, переписывать часть его, используя эти новые знания.

Alex
14.12.2018
10:54:44
find . -name '*.py' | xargs wc -l