0

Pythonでは、以下のシナリオのロジックが必要です。これに分割関数を使用しています。以下に示すように、入力を含む文字列があります。

"ID6740213841986年1月25日helooこんにちは5分と1988年1月25日ありがとう。"

"ID90990000025-01-1986こんにちは10分。"

また、出力は次のようになります。これは、日付形式を「日付」に、時間形式を「時間」に置き換えます。

「ID674021384日付こんにちはこんにちはありがとう時間日付。」

「ID909900000日付こんにちは時間。」

また、以下に示すように、各IDの日付と時刻のカウントが必要です

ID674021384日付:2時間:1

ID909900000日付:1時間:1

4

3 に答える 3

2
>>> import re
>>> from collections import defaultdict
>>> lines = ["ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.", "ID909900000 25-01-1986 hello 10 minutes."]
>>> pattern = '(?P<date>\d{1,2}[/-]\d{1,2}[/-]\d{4})|(?P<time>\d+ minutes)'
>>> num_occurences = {line:defaultdict(int) for line in lines}
>>> def repl(matchobj):
        num_occurences[matchobj.string][matchobj.lastgroup] += 1
        return matchobj.lastgroup

>>> for line in lines:
        text_id = line.split(' ')[0]
        new_text = re.sub(pattern,repl,line)    
        print new_text
        print '{0} DATE:{1[date]} Time:{1[time]}'.format(text_id, num_occurences[line])
        print ''


ID674021384 date heloo hi thanks time and date.
ID674021384 DATE:2 Time:1

ID909900000 date hello time.
ID909900000 DATE:1 Time:1
于 2012-04-13T14:48:45.270 に答える
1

ログファイルなどの同様のテキスト行を解析するために、reモジュールを使用して正規表現を使用することがよくあります。スペースと日付の一部を含まないフィールドを区切るsplit()場合にもうまく機能しますが、正規表現を使用すると、形式が期待どおりであることを確認でき、必要に応じて、奇妙な入力行について警告することもできます。

正規表現を使用すると、日付と時刻の個々のフィールドを取得し、それらから(両方ともモジュールから)構成dateまたはdatetimeオブジェクトを取得できます。datetimeこれらのオブジェクトを取得したら、それらを他の同様のオブジェクトと比較して新しいエントリを記述し、必要に応じて日付をフォーマットできます。入力ファイル全体を解析し(ファイルを読み取っていると仮定して)、その場で変更しようとするのではなく、まったく新しい出力ファイルを書き込むことをお勧めします。

日付と時刻のカウントを追跡することに関しては、入力が大きすぎない場合、通常、辞書を使用するのが最も簡単な方法です。特定のIDの行に遭遇した場合は、辞書でこのIDに対応するエントリを見つけるか、そうでない場合は新しいエントリを追加します。このエントリ自体は、日付と時刻をキーとして使用し、その値が検出されたそれぞれのカウントである辞書である可能性があります。

この回答が、コードが含まれていなくても、ソリューションへの道を案内してくれることを願っています。

于 2012-04-13T13:44:03.117 に答える
0

いくつかの正規表現を使用できます。

import re

txt = 'ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.'

retime = re.compile('([0-9]+) *minutes')
redate = re.compile('([0-9]+[/-][0-9]+[/-][0-9]{4})')

# find all dates in 'txt'
dates = redate.findall(txt)
print dates

# find all times in 'txt'
times = retime.findall(txt)
print times

# replace dates and times in orignal string:
newtxt = txt
for adate in dates:
    newtxt = newtxt.replace(adate, 'date')

for atime in times:
    newtxt = newtxt.replace(atime, 'time')

出力は次のようになります。

Original string:
ID674021384 25/01/1986 heloo hi thanks 5 minutes and 25-01-1988.
Found dates:['25/01/1986', '25-01-1988']
Found times: ['5']

New string:
ID674021384 date heloo hi thanks time minutes and date.

Dates and times found:
ID674021384 DATE:2 TIME:1

クリス

于 2012-04-13T14:41:33.463 に答える