【发布时间】:2018-02-23 08:07:34
【问题描述】:
我是编码和 python 的新手。我有包含期刊引用的文本文件,我需要提取期刊期号、编号(如果适用)以及页码或文章编号(如果没有页码)。然后我想将该信息写入另一个文本文件中的单独行。例如(目标提取物以粗体显示):
J Antimicrob Chemother。 2012 年 12 月;67(12):2843-7。 doi: 10.1093/jac/dks319。 Epub 2012 年 8 月 14 日。
PLoS 一。 2015 年 6 月 17 日;10(6):e0128773。 doi:10.1371/journal.pone.0128773。 eCollection 2015。勘误表:PLoS One。 2015;10(9):e0137697。公共科学图书馆一号。 2016;11(2):e0148706.
当输入是单个字符串时代码运行良好,但是当输入是文本文件中的多个字符串时,输出文件包含一些异常。一些切片字符串以“.”结尾,并在这些字符串之后插入一个新的空行。
示例输入:
Trends Microbiol. 1997 Jul;5(7):268-71. Review.
Mol Microbiol. 1996 Sep:21(6):1117-23. Review.
Mol Microbiol. 1996 Aug;21(4):675-82. Review.
Res Vet Sci. 1996 Mar;60(2):168-72.
J Thero Biol. 1994 Jun 7;168(3):281-9.
J Biol Chem. 1993 Aug 25;268(24):18321-9.
J Bacteriol. 1993 May;175(10):3051-7.
Appl Environ Microbiol. 1988 Oct;54(10):2365-70.
Infect Immun. 1983 Oct;42(1):276-84.
示例输出:
5.7.268-71
21.6.1117-23
21.4.675-82
60.2.168-72.
168.3.281-9.
268.24.18321-9.
175.10.3051-7.
54.20.2365-70.
42.1.276-84
如果字符串以“.”或“”结尾,我试图通过再次切片来纠正此问题,但由于某种原因,这仅适用于单个字符串。如果您对我在这里做错了什么提出任何建议,我将不胜感激。
slice_words = ['. doi', 'Epub', 'No abstract available', 'Erratum', 'Review', '. eCollection']
char_cleanup = ['). pii: ', ':', ').']
def string_processing(string):
string = string[string.index(";")+1:]
for i in slice_words:
if i in string:
string = string[:string.index(i)]
for j in char_cleanup:
if j in string:
string = string.replace(j, '.')
string = string.replace('(', '.')
while string.endswith('.') or string.endswith(' '):
string = string[:-1]
return string
f = open("reference_strings_OUT.txt", 'w')
with open("reference_strings_IN.txt") as g:
for line in g:
string = line
f.write(string_processing(string))
f.write("\n")
f.close()
【问题讨论】:
-
这些可能是文本文件中一段时间后的换行符。只需在拆分前执行
line =line.strip()。 -
非常感谢克劳迪奥,该脚本现在可以正常工作了。