我是一个python新手,我正在研究一个python脚本来从文本中提取时态表达式并在实际日期中对它们进行转换。
我有时在一行中有几个时态表达式,但是我的代码只检索第一个表达式。每个表达式以“{”开头,以“}”结尾。
我已经尝试了一些东西(while循环,for循环),但我找不到如何让它工作。我也尝试将线分成两部分,但脚本错误......
这是我的功能:
for in_line in file:
with open('file.txt', 'a+') as outfile:
if '{' in in_line:
start_expression = in_line.find('{')
start_values = in_line.find("values=")
end = in_line.find("}")
expression_temporelle = in_line[start_expression:end+1]
values = in_line[start_values+7:end]
print expression_temporelle
self.retrieve_expression(expression_temporelle, values, in_line, outfile)
(注意:其余的代码函数,如果表达式在不同的行中,则所有代码都被正确地转换)
以下是它打印的内容:(我在另一个程序上运行原始文本,将其呈现为此格式)
{20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} // temporal expression extracted
Reçu le [20-4-2015], CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}) // new sentence with only the first expression transformed
感谢您的帮助:)
抱歉,我意识到我不太清楚我发送给脚本的内容等。 我现在给剧本一个文本(并且对于上面给出的答案),我给出了“Reçedo{20 avril 2015,20 avril 2015.Time + Date + format = JJ_mois_AAAA + values = 20 + avril + 2015} CONCERNE:XXXXXXXXXXXXXXXXXXXXXXXXXX({07/04 / 1961,07 / 04 / 1961.Time + Date_naissance + format = JJ-MM-AAAA + values = 07-04-1961})“to the script(原文说”Reçule 20 avril 2015,CONCERNE:XXXXXXXXXXXXXXXXXXXXXXXXXX(néle07/04/1961)“但是通过另一个程序进行了修改。”
所以问题是我只提取行中的第一个时间表达式......
答案 0 :(得分:1)
使用文件abc.txt中的以下数据:
Reçu le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})
Reçu le {21 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=21+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX
Reçu le {22 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=22+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX
Reçu le {23 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=23+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})
文件中每一行的简单str.split('}')
都可以完成工作
infile = open('abc.txt','r')
line_count = 0
for in_line in infile:
line_count +=1
parts = in_line.split('}')
part_count = 0
for part in parts:
if '{' in part:
part_count +=1
start_expression = part.find('{')
start_values = part.find("values=")
expression_temporelle = part[start_expression:]
values = part[start_values+7:]
print "line", str(line_count)
print " part", str(part_count)
print " ", expression_temporelle+"}" #add back the } for printing
infile.close()
结果:
line 1
part 1
{20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015}
line 1
part 2
{07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}
line 2
part 1
{21 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=21+avril+2015}
line 3
part 1
{22 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=22+avril+2015}
line 4
part 1
{23 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=23+avril+2015}
line 4
part 2
{07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961}
您可以使用re
而非标准分组,即parts = re.split('(})', in_line)
,这会将}
留在列表中。
>>> x = "Reçu le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015} CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961})"
>>> s = x.split('}')
>>> s
['Re\xc3\xa7u le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015', ' CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961', ')']
>>> s = re.split('(})', x)
>>> s
['Re\xc3\xa7u le {20 avril 2015,20 avril 2015.Time+Date+format=JJ_mois_AAAA+values=20+avril+2015', '}', ' CONCERNE : XXXXXXXXXXXXXXXXXXXXXXXXXX ({07/04/1961,07/04/1961.Time+Date_naissance+format=JJ-MM-AAAA+values=07-04-1961', '}', ')']
答案 1 :(得分:0)
尝试在循环中使用re.findall()将时态表达式转换为列表。将文件的每一行都输入到此文件中以将其拆分,然后将它们附加到新列表中。
re.findall('\{(.*?)\}', line)