2017-03-15 24 views
0

我有一个大型文件,基本上看起来像日记,并希望提取有关每个日期的所有信息以进一步处理它。将匹配从findall/finditer转换为变量或字符串

File looks like this: 

Mittwoch, 13. September 2017 
19:00 Uhr 
20:00 Uhr 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy 
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam 
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. 

Mittwoch, 20. September 2017 
18:00 Uhr 
19:30 Uhr 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy 
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam 
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. 

为了实现这一点,我分析的日期与下面的代码返回每个日期作为一个比赛(我的findall使用,finditer,因为我不确定这是更好地处理)。

我现在想分配每个匹配作为一个变量与数字来形成开始和结束点。

这种方式我希望将文档分成单个事件。

问题是,我不知道如何分配匹配作为字符串或变量,并找不到有用的东西。

代码:

# finditer 
    matches = re.finditer((Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(,)([123][0-9]|[1-9])(.)(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)()([0-2][0-9][0-9][0-9])", contents) # finds all Dates and shows them in a List (Day , Number . Month () Year) 

    for match in matches: 
     print "{g}".format(g=match.group()) # returns dates below eachother without '' 

    # findall 
    matches = re.findall("(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonnabend|Sonntag)(,)([123][0-9]|[1-9])(.)(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)()([0-2][0-9][0-9][0-9])", contents) # finds all Dates and shows them in a List (Day , Number . Month () Year) 

    for aTuple in matches: 
     print "\n",('%r%r%r%r%r%r%r' % aTuple) # print findings after new line below eachother with '' 

    for Weekday, Comma, Day, Dot, Month, Space, Year in matches: 
     print "\n", Weekday, Comma, Day, Dot, Month, Space, Year 

所以在最后我想有这样的:

日期1 =( “Mittwoch,2017年13月”)

日期2 =(“Mittwoch ,2017年9月20日“)

这将允许提取Date1和Date2之间的所有内容。

感谢您的帮助和努力

回答

0

您可以一行一行地处理文件。

创建一个函数来检测单个行是否包含日期。找到该功能的第一个日期后,开始收集以下行作为您的内容。

当您点击包含日期的下一行时,处理您当前的内容行列表,然后重新开始。继续,直到你点击文件结尾。

如果您的日期格式一致,您可能需要依赖日期库(例如Python的日期时间和德语本地化)进行解析,而不是使用正则表达式。

+0

谢谢,但问题是,它不是唯一的文件,这将成为提取必要信息的模板。如果起始点和终点是一个日期,它会有所不同。所以我需要一种方法来使匹配变量能够在这些变量之间进行搜索和提取。没有一种简单的方法可以按发生顺序将每个matchobject变成一个变量吗? – Elite