Как разделить элементы в списке и получить дату и время из списка - PullRequest
0 голосов
/ 06 сентября 2018

С самого начала я боролся с импортом файлов на Python и чтением строк оптимальным способом. Например, файл, который у меня есть, выглядит следующим образом:

2015 02 25    09:00:00
A second line
One more line

Теперь я хочу извлечь дату и время из первой строки; для этого мы хотим, чтобы в этом формате, я думаю, чтобы он работал в модуле datetime

(2015,02,25,09,00,00)

Это то, что у меня есть

with open('file.txt', newline='') as inputfile:
  data = inputfile.readlines()
  print(data[0])
Out: ['2015 02 25    09:00:00']

Это дает нам первый элемент списка. Теперь я хочу сделать из этого список, разделенный запятыми. Теперь, когда я пытаюсь это например:

In: datetime = [i.split(':') for i in file[0]]
Out: [['2015 02 25    09', '00', '00']]

Я получаю список списков, который никак не облегчает жизнь. И мы даже еще не разбили пробелы. Каков наилучший способ получить дату и время из этого? И в целом, знаете ли вы какие-нибудь хорошие учебники для практики разбиения списков / строк, перебора текстовых файлов / списков и т. Д.

Ответы [ 4 ]

0 голосов
/ 06 сентября 2018

Разделить строку пробелами .split(" ") и извлечь year, month и day из первых 3 строк. Теперь последняя строка имеет time, разделите ее на :, т.е. .split(":"), чтобы извлечь hours, minutes и seconds.

f = open("sample.txt", "r")

data = f.read()
lines = data.split("\n")
first_line = lines[0]

str_arr = first_line.split(" ")
year = int(str_arr[0])
month = int(str_arr[1])
day = int(str_arr[2])
print("year : " + str(year))
print("Month : " + str(month))
print("Day : " + str(day))

last_index = len(str_arr)-1
time = str_arr[last_index].split(":")
hours = int(time[0])
minutes = int(time[1])
seconds = int(time[2])
print("Hours : " + str(hours))
print("Minutes : " + str(minutes))
print("seconds : " + str(seconds))

f.close()
0 голосов
/ 06 сентября 2018

Чтобы получить дату и время (или, скорее, datetime) из вашего ввода, проще всего использовать strptime.

import datetime

s = "2015 02 25    09:00:00"

dt = datetime.datetime.strptime(s, "%Y %m %d %H:%M:%S")

print(dt)

Выход:

2015-02-25 09:00:00

Вам даже не нужно беспокоиться о точном количестве пробелов в строке "format".

Затем вы можете конвертировать / форматировать объект datetime по мере необходимости.

0 голосов
/ 06 сентября 2018

почему бы просто не прочитать каждую строку одну за другой и просто добавить каждую строку в список?

mylist = []
with open(filename) as f:
    for line in f.readlines():
        mylist.append(line.strip("\n")) \\strip to get rid of the new line from the file
    print mylist

это будет читать каждую строку в файле отдельно, а затем добавлять каждую строку в список через запятую

это то, что вы ищете?

вывод будет выглядеть так

['2015 02 25    09:00:00', '2015 02 27    09:10:00', '2015 02 29    09:20:00']

то есть из 3 строк в файле, но я просто использовал одну и ту же запись, если у вас было 3 разных записи в файле, она поместила бы разные в список

Я не думаю, что кто-то здесь на самом деле знает, чего вы хотите, если бы вы могли получить конечный результат, который вы ищете, который очень помог бы всем и дал бы вам ответ намного быстрее

0 голосов
/ 06 сентября 2018

Полагаю, вы хотите это:

line="2015 02 25    09:00:00\n"   # here line is data[0]

toks = line.split()
date = " ".join(toks[:3])
time = toks[-1]   # you can split it according to ":" now if you want

print(date)
print(time)

печать:

2015 02 25
09:00:00

разделите токены по 1-n пробелам, затем соедините 3 первых токена, чтобы получить дату, и получите последний элемент, чтобы получить время.

Python 3 позволяет распаковывать звездочки, так что вы можете сделать это напрямую:

*datetoks,time = line.split()
date = " ".join(datetoks)

(datetoks содержит все токены, кроме последнего благодаря *)

...