Получить дату из строки путем разделения

У меня есть пакет необработанных текстовых файлов. Каждый файл начинается с Date>>month.day year News garbage.

garbage — это много текста, который мне не нужен, и длина его может быть разной. Слова Date>> и News всегда появляются в одном и том же месте и не меняются.

Я хочу скопировать месяц день год и вставить эти данные в файл CSV с новой строкой для каждого файла в формате день месяц год.

Как скопировать месяц, день, год в отдельные переменные?

Я попытался разбить строку после известного слова и перед известным словом. Я знаком со строкой [x: y], но в основном я хочу изменить x и y из чисел в настоящие слова (например, строку [Date>>: News])

import re, os, sys, fnmatch, csv
folder = raw_input('Drag and drop the folder > ')
for filename in os.listdir(folder):
# First, avoid system files
if filename.startswith("."):
    pass
else:
    # Tell the script the file is in this directory and can be written
    file = open(folder+'/'+filename, "r+")
    filecontents = file.read()
    thestring = str(filecontents)
    print thestring[9:20]

Пример текстового файла:

Date>>January 2. 2012 News 122

5 different news agencies have reported the story of a man washing his dog.

person Craig    schedule 27.05.2014    source источник


Ответы (3)


Вот решение с использованием модуля re:

import re

s = "Date>>January 2. 2012 News 122"
m = re.match("^Date>>(\S+)\s+(\d+)\.\s+(\d+)", s)
if m:
   month, day, year = m.groups()
   print("{} {} {}").format(month, day, year)

Выходы:

January 2 2012

Изменить:

На самом деле, есть еще одно более приятное (имо) решение с использованием re.split, описанное в ссылка Робин опубликовано. Используя этот подход, вы можете просто сделать:

month, day, year = re.split(">>| |\. ", s)[1:4]
person dano    schedule 27.05.2014

Вы можете использовать строковый метод .split(" ") для разделения вывода на список переменных, разделенных пробелом. Поскольку год и месяц.день всегда будут в одном и том же месте, вы можете получить к ним доступ по их положению в выходном списке. Чтобы разделить месяц и день, снова используйте функцию .split, но на этот раз для .

Пример:

list = theString.split(" ")
year = list[1]
month= list[0].split(".")[0]
day = list[0].split(".")[1]
person Ian Leaman    schedule 27.05.2014
comment
Однако не следует использовать слово list, иначе именно так я бы это сделал. - person woot; 27.05.2014
comment
Кроме того, вам нужно обработать «Дата››» - person woot; 27.05.2014

Вы можете использовать string.split:

x = "A b c"
x.split(" ")

Или вы можете использовать регулярные выражения (которые, я вижу, вы импортируете, но не используете) с группами. Я не помню точный синтаксис навскидку, но что-то вроде r'(.*)(Date>>)(.*). Это ищет строку «Дата>>» между двумя строками любого другого типа. Скобки объединят их в пронумерованные группы.

person Yike Lu    schedule 27.05.2014