2012-05-18 3 views
1

У меня есть некоторые данные, которые необходимо очистить перед вставкой в ​​БД. Каждая строка представляет собой публикацию, а некоторые из них имеют различное форматирование. Единственное сходство состоит в том, что каждая запись находится в одной строке. Например.Группировка символов в Python

5: Aghasadeghi MR, Salmani AS, Sadat SM, Javadi F, Memarnejadian A, Vahabpour R, Zabihollahi R, Moshiri A, Siadat SD. Application of outer membrane vesicle ofNeisseria meningitidis serogroup B as a new adjuvant to induce stronglyTh1-oriented responses against HIV-1. Curr HIV Res. 2011 Dec 1;9(8):630-5. PubMedPMID: 22211657. 
6: Ramezani A; Banifazl M; Mohraz M; Rasoolinejad M; Aghakhani A; Occulthepatitis B virus infection: A major concern in HIV-infected patients: Occult HBVin HIV. Hepat Mon. 2011 Jan 1;11(1):7-10. PubMed PMID: 22087108; PubMed CentralPMCID: PMC3206662. 
7: Roohvand, F., Kossari, N. Advances in hepatitis C virus vaccines, Part one:Advances in basic knowledge for hepatitis C virus vaccine design. Expert OpinTher Pat. 2011 Dec;21(12):1811-30. Epub 2011 Oct 25. Review. PubMed PMID:22022980. 
8: Chinikar, S., Javadi, A., Ataei, B., Shakeri, H., Moradi, M., Mostafavi, E., Ghiasi, S.M.Detection of West Nile virus genome and specific antibodies in Iranianencephalitis patients. Epidemiol Infect. 2011 Oct 19:1-5. [Epub ahead of print]PubMed PMID: 22008154. 

Вы можете видеть, что некоторые авторы разделены точкой с запятой, а другие разделены запятой. Строки 7 и 8 имеют запятую, которая отделяет фамилию от среднего начального. Я хотел бы сгруппировать всех авторов и поместить их в поле автора или, возможно, разместить их в своих собственных столбцах. Каким будет лучший способ отделить друг друга от этих авторов? Это непростая задача ;-)

+0

ожидаемый выход? –

+0

Мне нужен текстовый файл с разделителями табуляции, который отделяет авторов от остальной части содержимого. – aeupinhere

ответ

4

Это может быть сложно, если формат не согласован, потому что вам нужно сделать некоторые предположения. Предположение, которое я делаю для этого решения, заключается в том, что люди не будут иметь имена длиной более 20 символов, а названия будут не менее 20 символов и не содержат запятых, полуколоний или периодов.

Вот версия, которая будет вставить вкладку после последнего автора:

result = '' 
for line in text.split('\n'): 
    result += re.sub(r'([^,;.]{20,}.*)', r'\t\1', line) + '\n' 

А вот способ получить список авторов для каждой книги:

authors = [] 
for line in text.split('\n'): 
    names = re.split(r'\d+: |[^,;.]{20,}', line)[1] 
    authors.append(re.findall(r'\w+,? [\w.]+', names)) 

Результат:

>>> pprint.pprint(authors, width=200) 
[['Aghasadeghi MR', 'Salmani AS', 'Sadat SM', 'Javadi F', 'Memarnejadian A', 'Vahabpour R', 'Zabihollahi R', 'Moshiri A', 'Siadat SD.'], 
['Ramezani A', 'Banifazl M', 'Mohraz M', 'Rasoolinejad M', 'Aghakhani A'], 
['Roohvand, F.', 'Kossari, N.'], 
['Chinikar, S.', 'Javadi, A.', 'Ataei, B.', 'Shakeri, H.', 'Moradi, M.', 'Mostafavi, E.', 'Ghiasi, S.M.']] 
+1

NICE! Какой замечательный способ закончить долгую неделю! Огромное спасибо... – aeupinhere

Смежные вопросы