복붙노트

[PYTHON] 파이썬에서 문자열에서 날짜 추출하기

PYTHON

파이썬에서 문자열에서 날짜 추출하기

"원숭이 2010-07-10 사랑 바나나"와 같은 문자열에서 날짜를 추출하려면 어떻게해야합니까? 감사!

해결법

  1. ==============================

    1.날짜가 고정 된 형식으로 주어지면 정규식을 사용하여 날짜를 추출하고 "datetime.datetime.strptime"을 사용하여 날짜를 구문 분석 할 수 있습니다.

    날짜가 고정 된 형식으로 주어지면 정규식을 사용하여 날짜를 추출하고 "datetime.datetime.strptime"을 사용하여 날짜를 구문 분석 할 수 있습니다.

    match = re.search(r'\d{4}-\d{2}-\d{2}', text)
    date = datetime.strptime(match.group(), '%Y-%m-%d').date()
    

    그렇지 않으면 날짜가 임의의 형식으로 주어지면 쉽게 추출 할 수 없습니다.

  2. ==============================

    2.python-dateutil 사용하기 :

    python-dateutil 사용하기 :

    In [1]: import dateutil.parser as dparser
    
    In [18]: dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
    Out[18]: datetime.datetime(2010, 7, 10, 0, 0)
    

    날짜가 잘못되면 ValueError가 발생합니다.

    In [19]: dparser.parse("monkey 2010-07-32 love banana",fuzzy=True)
    # ValueError: day is out of range for month
    

    다양한 형식의 날짜를 인식 할 수 있습니다.

    In [20]: dparser.parse("monkey 20/01/1980 love banana",fuzzy=True)
    Out[20]: datetime.datetime(1980, 1, 20, 0, 0)
    

    날짜가 모호한 지 짐작할 수 있습니다.

    In [23]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True)
    Out[23]: datetime.datetime(1980, 10, 1, 0, 0)
    

    그러나 모호한 날짜를 구문 분석하는 방식은 사용자 정의 할 수 있습니다.

    In [21]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True, dayfirst=True)
    Out[21]: datetime.datetime(1980, 1, 10, 0, 0)
    
  3. ==============================

    3.파이썬에서 문자열로부터 날짜 추출하기. 사용할 수있는 가장 좋은 모듈은 datefinder 모듈입니다.

    파이썬에서 문자열로부터 날짜 추출하기. 사용할 수있는 가장 좋은 모듈은 datefinder 모듈입니다.

    아래에있는 쉬운 단계에 따라 Python 프로젝트에서 사용할 수 있습니다.

    pip install datefinder
    
    import datefinder
    
    input_string = "monkey 2010-07-10 love banana"
    # a generator will be returned by the datefinder module. I'm typecasting it to a list. Please read the note of caution provided at the bottom.
    matches = list(datefinder.find_dates(input_string))
    
    if len(matches) > 0:
        # date returned will be a datetime.datetime object. here we are only using the first match.
        date = matches[0]
        print date
    else:
        print 'No dates found'
    

    참고 : 많은 수의 경기를 예상하는 경우; 목록에 대한 타입 캐스팅은 큰 성능 오버 헤드가 발생하기 때문에 권장되는 방법이 아닙니다.

  4. ==============================

    4.Pygrok를 사용하면 정규 표현식 구문에 대한 추상 확장을 정의 할 수 있습니다.

    Pygrok를 사용하면 정규 표현식 구문에 대한 추상 확장을 정의 할 수 있습니다.

    사용자 정의 패턴은 % {PATTERN_NAME} 형식으로 정규식에 포함될 수 있습니다.

    콜론으로 분리하여 해당 패턴의 레이블을 만들 수도 있습니다 : % s {PATTERN_NAME : matched_string}. 패턴이 일치하면 값은 결과 사전의 일부로 반환됩니다 (예 : result.get ( 'matched_string')).

    예 :

    from pygrok import Grok
    
    input_string = 'monkey 2010-07-10 love banana'
    date_pattern = '%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day}'
    
    grok = Grok(date_pattern)
    print(grok.match(input_string))
    

    결과 값은 사전이됩니다.

    { '월': '07', '일': '10', '연도': '2010'}

    date_pattern이 input_string에 없으면 반환 값은 None입니다. 반대로 패턴에 레이블이 없으면 빈 사전 {}이 반환됩니다.

    참고 문헌 :

  5. ==============================

    5.문자열 (예 : 로그 파일)에서 날짜 개체의 위치를 ​​알고있는 경우 .split () [인덱스]를 사용하여 형식을 완전히 알지 못해도 날짜를 추출 할 수 있습니다.

    문자열 (예 : 로그 파일)에서 날짜 개체의 위치를 ​​알고있는 경우 .split () [인덱스]를 사용하여 형식을 완전히 알지 못해도 날짜를 추출 할 수 있습니다.

    예 :

    >>> string = 'monkey 2010-07-10 love banana'
    >>> date = string.split()[1]
    >>> date
    '2010-07-10'
    
  6. from https://stackoverflow.com/questions/3276180/extracting-date-from-a-string-in-python by cc-by-sa and MIT license