Команда Google Colab создала блокнот, посвященный загрузке / загрузке внешних данных. Один из блоков - загрузка файлов в локальную систему .
Адаптация их примера к кадру данных Pandas df
, сохраненному в виде файла csv:
from google.colab import files
import pandas as pd
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
df.to_csv('dataframe.csv')
files.download('dataframe.csv')
Более конкретный пример ситуации OP (запуск сценария Python внутри ячейки Colab): сначала сценарий
# makeVectors.py
import pandas as pd
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
df.to_csv('dataframe.csv')
И ячейка Colab
!python3 makeVectors.py
from google.colab import files
files.download('dataframe.csv')
Во втором примере есть некоторые проблемы, в частности дополнительные функции, предоставляемые пакетом google.colab
(а также любая обычная магия iPython) не работает в рамках вызова python3
.
Также взгляните на Асинхронные шаблоны Маркера и ActiveObject Завершения.
Можно хотеть посмотреть на Скрученный Python. Это - хороший основанный на реакторе API, который поддерживает асинхронные операции. Проагент является распространенным словом для асинхронного обработчика завершений как платформы.
Это походит на шаблон разработки The Observer. ссылка.
Ваш объект клиента является Наблюдателем. Ваш API принадлежит объекту, это Заметно.
Каждый клиент (в языке Java) реализует интерфейс The Observer. В Python это - вопрос каждого клиента, предлагающего много методов, которые будет использовать Ваше заметное.
class SomeClientInterface( object ):
def update( self, source, data ):
# handle data being pushed from Observable source
def error( self, from, status ):
# handle error in Observable source
Ваш Заметный объект имеет способ для Наблюдателей зарегистрировать и сделать другие вещи.
class Observable( object ):
def __init__( self ):
self.clients= set()
def register( self, observer ):
self.clients.add( observer )
def whenSomethingHappens( self ):
# doing work
if itAllWentToHell:
for c in self.clients:
c.error( self, "some status object" )
else:
for c in self.clients:
c.update( self, the pushed data )
def waitFor( self ):
# observers are waiting...
return theData
def status( self ):
return self.currentState