Это не самый красивый код, но я верю, что он решает твою проблему. Я думал об использовании некоторого регулярного выражения, чтобы избежать разделения процентов, но решил, что данные всегда следуют одному и тому же шаблону, поэтому это должно сработать.
def remove_dangling_comma(content):
if content[-1] == ',':
return content[:-1]
return content
data_columns = []
with open("words.txt", 'r') as f:
for i, line in enumerate(f):
if i == 0:
continue # skip header
parts = line.split()
node_name = parts[0]
# concatenate broken parts of the same data and remove dangling commas, if any
requested_bytes = remove_dangling_comma(' '.join([parts[1], parts[2], parts[3]]))
total_time = remove_dangling_comma(' '.join([parts[4], parts[5], parts[6]]))
accelerator_time = remove_dangling_comma(' '.join([parts[7], parts[8], parts[9]]))
cpu_time = remove_dangling_comma(' '.join([parts[10], parts[11], parts[12]]))
# append the processed data to the list
data_columns.append([node_name, requested_bytes, total_time, accelerator_time, cpu_time])
print(data_columns)
Вывод:
[
['prefix/up20/conv2d_transpose', '18.87MB (84.66%, 7.67%)', '115.01ms (95.17%, 3.68%)', '0us (0.00%, 0.00%)', '115.01ms (95.17%, 3.68%)'],
['prefix/up17/conv2d_transpose', '18.87MB (76.99%, 7.67%)', '91.43ms (91.49%, 2.93%)', '0us (0.00%, 0.00%)', '91.43ms (91.49%, 2.93%)'],
['prefix/fres19/conv_b_1x3/Conv2D', '2.10MB (69.33%, 0.85%)', '46.41ms (88.56%, 1.49%)', '0us (0.00%, 0.00%)', '46.41ms (88.56%, 1.49%)'],
['prefix/fres5/conv_b_3x1/Conv2D', '2.10MB (68.47%, 0.85%)', '44.63ms (87.07%, 1.43%)', '0us (0.00%, 0.00%)', '44.63ms (87.07%, 1.43%)'],
['prefix/fres6/conv_a_3x1/Conv2D', '2.10MB (67.62%, 0.85%)', '40.19ms (85.64%, 1.29%)', '0us (0.00%, 0.00%)', '40.19ms (85.64%, 1.29%)'],
['prefix/fres22/conv_a_3x1/Conv2D', '2.10MB (66.77%, 0.85%)', '39.97ms (84.36%, 1.28%)', '0us (0.00%, 0.00%)', '39.97ms (84.36%, 1.28%)'],
['prefix/fres21/conv_a_3x1/Conv2D', '2.10MB (65.92%, 0.85%)', '38.85ms (83.08%, 1.24%)', '0us (0.00%, 0.00%)', '38.85ms (83.08%, 1.24%)']
]
Это действительно легко, Bruno. Просто звоните
IAuthenticationRequest.AddCallbackArguments("returnUrl", Request.QueryString["returnUrl"]);
Это скажет DotNetOpenId сохранять returnUrl аргумент на странице входа в систему и получать поведение, которое Вы хотите. Я должен не согласиться с Franci относительно разделения URL, который отображает страницу входа в систему от той, которая обрабатывает результат. Для ASP.NET сайты MVC, которые могут быть соответствующими, но для веб-форм ASP.NET это - действительно не способ пойти, с тех пор в дополнение к отображению любой ошибки пользователю, Вы несомненно захотите также отобразить форму входа в систему снова. Кроме того, до разделения логики, библиотека DotNetOpenId делает весь тяжелый подъем для Вас, таким образом, существует едва любая логика в Вашем коде - позади страницы так или иначе.
Если Вы хотите, чтобы поставщик OpenID возвратился к другому URL, необходимо использовать OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl)
метод при создании запроса аутентификации.
Однако обычно Вы не хотите, чтобы поставщик OpenID перенаправил назад к URL, который инициировал последовательность входа в систему в рамках Вашего приложения. Вы хотите возвратиться до такой степени, когда, Вы инициировали автора OpenID для обработки правильно ответа. Помогает с инкапсуляцией уровня OpenID от остальной части логики в Вашем приложении.
Вот пример:
В моем приложении MVC ASP.NET у меня есть a User
контроллер с Authenticate
действие, которое обрабатывает запросы входа в систему.
Authenticate
проверки действия OpenIdRelyingParty.Response
. Если это null
, вызовы действия RedirectToProvider
. Поставщик возвращается назад к тому же действию, где я проверяю Respons.Status
. Если это AuthenticationStatus.Authenticated
Я использую FormsAuthentication.RedirectFromLoginPage
(openid.Response.ClaimedIdentifier, true)
для возвращения к странице, пользователь инициировал вход в систему seqeuence от.
Однако, если состояние AuthenticationStatus.Failed
или 'AuthenticationStatus. Отмененный', я могу предложить пользовательские шаги для разрешения, это выходит. Я могу предложить им, чтобы исправить их OpenID, если введено с опечаткой или войти в систему с именем пользователя/паролем вместо этого. (Я поддерживаю и OpenID и имя пользователя/аутентификацию по паролю для того же identitites),
Мое поле входа в систему находится на каждой странице. Если поставщик OpenID перенаправил меня назад к странице, которая инициировала запрос входа в систему, возможности состоят в том, что страница не будет способна к обработке отказа правильно.