2016-01-23 6 views
5

私はそこに32の記事を含むテキスト文書を持っています、そして、私は各記事の日付を見つける必要があります。私は日付が各記事の5行目に来ることを観察しました。これまでのところ、私が使用して32件の記事の中にテキストを分割している:それは見ることができるようにenter image description here日付のテキスト

import re 
sections = [] 
current = [] 
with open("Aberdeen2005.txt") as f: 
    for line in f: 
     if re.search(r"(?i)\d+ of \d+ DOCUMENTS", line): 
      sections.append("".join(current)) 
      current = [line] 
     else: 
      current.append(line) 

print(len(sections)) 

を私はそれぞれの記事、MONTHのみYEARの日付を含むリストを作成するようになります、日付は上記の画像の形式になりますが、時にはその日は含まれません。木曜日。

アイデア?

種類について、

アンドレス

Psと。ここでは16の文書の別の例である:あなたが一日置き換えることができif文の下に正規表現を使用して enter image description here

答えて

1

regx = re.compile(ur'(\w+\s\d{1,2},\s\d{4})\s\w{6,9}') 
line = re.sub(regx, "\\1", line) 

例:

https://regex101.com/r/pJ0nZ8/1

linecache方法:

linecacheモジュールを使用すると、特に5行目をキャプチャしてファイルに書き込むことができます。日付に平日が含まれている場合、切り捨てられます。この機能を使用するともっと細かいことが可能になりますが、より詳細な情報をお伝えします。

import linecache 

w = 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday' 
l = linecache.getline("Aberdeen2005.txt",5) 
m = [d in l for d in w] 
c = '2005','2016' # years (optional) 

if any(y in l for y in c): # check for years (optional) 

    if any(x in l for x in w): 
     r = [i for i,v in enumerate(m,0) if v] 
     l = l.replace(' '+w[r[0]],'') 

    with open("dates.txt", "a") as article_dates: 
     article_dates.write(l) 

linecache.clearcache() 
+0

コードはどのように見えますか? –

+0

挿入しようとするとタブとスペースに関するエラーが表示されます。それにもかかわらず、アイデアは素晴らしいです、ありがとう! –

+0

よろしくお願いします!イメージからの線の書式設定が正確であることを正確に伝えるのは難しいので、記事の実際の最初の5行を質問に投稿して助けてください。正確に何がエラーですか? –

1

または、reを使用して文字列内のパターンを見つけることができます。たとえば :関数は何かを返す場合

date1 = 'December 29, 2005 Thursday' 
date2 = 'February 1, 2015' 

re.findall("[A-Za-z]+ [0-9]{1,2}, [0-9]{4}", date1) 
['December 29, 2005'] 

re.findall("[A-Za-z]+ [0-9]{1,2}, [0-9]{4}", date2) 
['February 1, 2015'] 

、あなたが日付として文字列全体を考えることができます。

0

私はdateutil.parserライブラリを試してみます。私はそれを使用するのは少し厄介なことがわかりましたが、仕事は日付のように見える文字列を取り、その日付をdatetimesに変換することです。私はそれがかなり有能であることが分かった。

ドキュメントはhereであり、必要な機能はparse()です(つまりdateutil.parser.parse())。

関連する問題