Игнорировать последний элемент в каждой строке:
with open(waveform, 'rb') as f:
reader = csv.reader(f)
for row in reader:
print row[:-1]
или преобразовать каждую строку в dict:
columns = ['value']
with open(waveform, 'rb') as f:
reader = csv.reader(f)
for row in reader:
rec = dict(zip(columns, row))
print rec
печатает
{'value': '-1'}
{'value': '-1'}
{'value': '1'}
{'value': '1'}
Вы можете использовать Capture
для захвата любого пути. Однако ему должно предшествовать :
симв. Так, например,
type AppRoute = Capture "routePath" String :> Get '[HTML] RawHtml
type ServerAPI =
Get '[HTML] RawHtml
:<|> UserAPI
:<|> AdminAPI
:<|> AppRoute
Теперь AppRoute
сработает на yourserver.com/:thisIsMyPath/
и передаст "thisIsMyPath"
в качестве аргумента для конечной точки. В настоящее время я не знаю, как это обойти :
. Предполагая, что html
является конечной точкой, которая в данный момент не зависит от заданного пути, вы можете определить весь свой сервер как
server :: Server ServerAPI
server = html
:<|> userServer
:<|> adminServer
:<|> const html
. Вы можете прочитать об этом здесь . 1114]
Кстати, почему бы не использовать псевдоним type
вместо того, чтобы брать семейства типа tanky? В моих приложениях Servant я обычно делаю
type AppRoute (x :: Symbol) = x :> Get '[HTML] RawHtml
, что прекрасно работает.