2017-04-23 53 views
1

提取所有表達式的問題我是一個Python新手,我目前工作的一個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çu勒{20艾薇2015,20艾薇2015.Time +日期+格式= JJ_mois_AAAA +值= 20 +艾薇+ 2015} CONCERNE:XXXXXXXXXXXXXXXXXXXXXXXXXX({7月4日/ 1961,07/04/1961.Time + Date_naissance +格式(原文爲「Reçule 20 avril 2015,CONCERNE:XXXXXXXXXXXXXXXXXXXXXXXXXX(néle 07/04/1961)」),但通過其他程序)。

所以,問題是我只在該行提取第一時間表達...

+0

嘗試在'}'上分行,這會給你一個列表。然後處理列表中的每個項目。 –

+0

當我做到這一點,我有作爲結果:Reçu樂[20-4-2015],CONCERNE:XXXXXXXXXXXXXXXXXXXXXXXXXX({7月4日/ 1961,07/04/1961.Time + Date_naissance +格式= JJ-MM-AAAA +值= 1961年7月4日}) ...第一行仍是唯一一個進行處理:/ – Lili

+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', '}', ')'] 
+0

完美地工作,謝謝! – Lili

0

嘗試使用循環內的re.findall()把你的時間表達成列表。將文件的每一行填入此文件中,然後將它們附加到新列表中。

re.findall('\{(.*?)\}', line)