Для этого вы можете использовать deque .
Учитывая:
$ cat /tmp/file.csv
firstName,lastName,email,phoneNumber
John,Doe,john@doe.com,0123456789
Jane,Doe,jane@doe.com,9876543210
James,Bond,james.bond@mi6.co.uk,0612345678
Предположим, что вы хотите, чтобы линия с Jane
и строка перед и после.
Попробуйте:
import csv
from collections import deque
dq=deque([[None] for _ in range(3)],maxlen=3)
with open(fn,'r') as f:
for row in csv.reader(f):
dq.append(row)
if dq[-2][0]=='Jane': break # here you can use your custom function
Затем:
>>> dq
deque([['John', 'Doe', 'john@doe.com', '0123456789'], ['Jane', 'Doe', 'jane@doe.com', '9876543210'], ['James', 'Bond', 'james.bond@mi6.co.uk', '0612345678']], maxlen=3)
Вот что я в итоге сделал:
Я переместил обоих клиентов в подкаталог a/
:
static/a/web
static/a/admin
Далее, я реализовал ForwardController
так: [116 ]
@Controller
public class ForwardController {
@RequestMapping(value = "/*", method = RequestMethod.GET)
public String redirectRoot(HttpServletRequest request) {
return "forward:/a/web/index.html";
}
@RequestMapping(value = "/a/**/{path:[^.]*}", method = RequestMethod.GET)
public String redirectClients(HttpServletRequest request) {
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/a/admin/")) {
return "forward:/a/admin/index.html";
}
return "forward:/a/web/index.html";
}
}
Дочерние маршруты не будут работать, потому что главный индекс должен быть загружен раньше, чтобы получить все маршруты. Обходной путь - перенаправлять на основной индекс каждый раз, когда серверная часть не находит путь:
@Controller
@RequestMapping("/error")
public class ErrorHandlerController extends AbstractErrorController {
private static final String ROOT_PATH = "/";
public ErrorHandlerController(ErrorAttributes errorAttributes) {
super(errorAttributes);
}
@RequestMapping
public void errorHtml(HttpServletRequest request,
HttpServletResponse response) throws IOException {
if(HttpStatus.NOT_FOUND.equals(getStatus(request))) {
response.sendRedirect(ROOT_PATH);
}
}
@Override
public String getErrorPath() {
return "error";
}
}