MySQL: wiered прерывание строки при использовании «SELECT INTO OUTFILE» - PullRequest
0 голосов
/ 11 мая 2019

Я экспортировал два поля: name и header из базы данных, используя:

SELECT name, header 
INTO OUTFILE '/var/lib/mysql-files/myfile.txt'
FIELDS TERMINATED BY '<xx>' 
LINES TERMINATED BY '\n'
FROM mytable;

Одна запись имеет это header значение:

{'Date': 'Fri, 19 Apr 2019 07:23:14 GMT', 'Server': 'Apache', 'Vary': «Qualys-Scan», «Strict-Transport-Security»: «max-age = 31536000; includeSubDomains; предварительная загрузка», «Set-Cookie»: «ASP.NET_SessionId = ivoa5bhet0s2ygkylmimvkie; Путь = /; обеспечения; HttpOnly; SameSite = строгое, SC_ANALYTICS_GLOBAL_COOKIE = 12f133ea5080403692b4ce458fd1a540; истекает = чт, 19-апр-2029 07:23:14 GMT; Путь = /; обеспечения; HttpOnly; SameSite = строгое, SC_ANALYTICS_SESSION_COOKIE = 336B597E7A534D6393C57DF11E047484 | 1 | ivoa5bhet0s2ygkylmimvkie; Путь = /; обеспечения; HttpOnly; SameSite = строгое, incap_ses_885_270026 = Cdp / VlO1AHgshF9F6SZIDGJ3uVwAAAAAg7DwpecyehBCyhXgoYO5GA ==; Путь = /; Домен = .zurich.co.uk, ___ utmvmykuNyVY = dlNaoEsuXSO; Путь = /; Макс-возраст = 900, ___ утмвайкуNyVY = nWJx01KvGT; Путь = /; Max-Age = 900, ___ utmvbykuNyVY = JZY XEtOwalQ: PtR; Путь = /; Max-Age = 900 ',' X-Content-Type-Options ':' nosniff ',' X-XSS-Protection ':' 1; mode = block ',' Cache-Control ': 'private', 'Content-Type': 'text / html; charset = utf-8 ',' Keep-Alive ': 'timeout = 5, max = 10', 'Connection': 'Keep-Alive', 'X-Iinfo': '8-3925806-3925807 NNNN CT (73 151 0) RT (1555658593583 5) q (0 0 3 0) r (6 6) U5 ',' X-CDN ':' Incapsula ',' Content-Encoding ':' gzip ', 'Transfer-Encoding': 'chunked'}

Экспортируется как:

https://z.co.uk{'Date': 'Пт, 19 апреля 2019 07:23:14 GMT', «Сервер»: «Apache», «Vary»: «Qualys-Scan», 'Строгий-Transport-Security': «max-age = 31536000; includeSubDomains; предварительная загрузка», «Set-Cookie»: «ASP.NET_SessionId = ivoa5bhet0s2ygkylmimvkie; Путь = /; обеспечения; HttpOnly; SameSite = строгое, SC_ANALYTICS_GLOBAL_COOKIE = 12f133ea5080403692b4ce458fd1a540; истекает = чт, 19-апр-2029 07:23:14 GMT; Путь = /; обеспечения; HttpOnly; SameSite = строгое, SC_ANALYTICS_SESSION_COOKIE = 336B597E7A534D6393C57DF11E047484 | 1 | ivoa5bhet0s2ygkylmimvkie; Путь = /; обеспечения; HttpOnly; SameSite = строгое, incap_ses_885_270026 = Cdp / VlO1AHgshF9F6SZIDGJ3uVwAAAAAg7DwpecyehBCyhXgoYO5GA ==; Путь = /; Домен = .zurich.co.uk, ___ utmvmykuNyVY = dlNaoEsuXSO; Путь = /; Max-Age = 900, __utmvaykuNyVY = nWJx01KvGT; Путь = /; Max-Age = 900, ___ utmvbykuNyVY = JZY

И в новой строке (обратите внимание, что она начинается с вкладки, поэтому при переполнении стека она отображается в виде кода):

XEtOwalQ: PtR; path=/; Max-Age=900', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control':

'private', 'Content-Type': 'text / html; charset = utf-8 ',' Keep-Alive ': 'timeout = 5, max = 10', 'Connection': 'Keep-Alive', 'X-Iinfo': '8-3925806-3925807 NNNN CT (73 151 0) RT (1555658593583 5) q (0 0 3 0) r (6 6) U5 ',' X-CDN ':' Incapsula ',' Content-Encoding ':' gzip ', 'Transfer-Encoding': 'chunked'}

Почему это произошло? Как этого избежать?

Это вызывает у меня большую проблему и появляется во многих других записях (но не во всех).

Мне нужно прочитать строки файла, используя python, и python идентифицирует разделенную строку как две строки вместо одной, что приводит к тому, что строки не соответствуют формату строки, который я обрабатываю с python, и я получаю сообщение об ошибке out of index .

1 Ответ

0 голосов
/ 11 мая 2019

Примерно так (не проверено):

with open('/var/lib/mysql-files/myfile.txt') as f:
    lines = f.read().splitlines()
i = 0
lines2 = []
while i<len(lines):
    if ('{' in lines[i]) and ('}' not in lines[i]):
        l = lines[i] + ' ' + lines[i+1] + '\n'
        i += 1
    else:
        l = lines[i] + '\n'
    lines2.append(l)
    i += 1

with open('/var/lib/mysql-files/fixed.txt', 'w') as f:
    f.writelines(lines2)
...