Эликсир - объединение двух карт с одинаковыми именами и значениями ключей в виде списков?

Если вы хотите использовать стандартные флеш-файлы - нет способа избежать сохранения временного файла, если размер загруженного файла составляет> 500 кб. Если он меньше 500 КБ, он будет использовать «BytesIO», который хранит содержимое файла в памяти, а если он больше 500 КБ - он хранит содержимое в TemporaryFile () (как указано в документации werkzeug ). В обоих случаях ваш скрипт будет блокироваться до тех пор, пока не будет получен весь загруженный файл.

Самый простой способ обойти это, что я нашел:

1) Создайте свой собственный файл- как класс IO, где вы выполняете всю обработку входящих данных

2) В вашем скрипте переопределите класс Request своим:

class MyRequest( Request ):
  def _get_file_stream( self, total_content_length, content_type, filename=None, content_length=None ):
    return MyAwesomeIO( filename, 'w' )

3) Замените запрос_класса Flask вашим собственный:

app.request_class = MyRequest

4) Идите, выпейте пиво:)

0
задан ugotchi 5 March 2019 в 17:11
поделиться

2 ответа

используют оператор ++ для объединения списков

iex(1)> a = %{ list: [1,2,3]}
iex(2)> b = %{ list: [4,5,6]}
iex(3)> %{list:  a.list ++ b.list}
%{list: [1, 2, 3, 4, 5, 6]}

более общий:

  def test_merge do
    a = %{ list: [1,2,3], list2: [10, 20]}
    b = %{ list2: [40, 30], list: [4,5,6]}
    keys = Map.keys(a)
    Enum.map(keys ,fn(key) -> {key, a[key] ++  b[key] }end) 
    |> Enum.into(%{})
  end

результат:

%{list: [1, 2, 3, 4, 5, 6], list2: [10, 20, 40]}

0
ответ дан dina 5 March 2019 в 17:11
поделиться

Вы также можете использовать Map.merge/3, чтобы легко справиться с этим делом. Проверьте это:

a = %{ list: [1,2,3] }
b = %{ list: [4,5,6] }
c = Map.merge(a, b, fn _, la, lb -> la ++ lb end)

Наслаждайтесь!

0
ответ дан Tim Lowrimore 5 March 2019 в 17:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: