2016-10-11 2 views
0

У меня есть ДФ полного текста
Я хотел бы определить переменную даты, которая всегда три строки после версии. вот мой кодпитона: захватить определенную линию после матча

with open(input_file1,'r') as f: 
    for i, line in enumerate(f): 
     if line.startswith('Version'): 
      version = line.strip() 
      date = line + 3 
      print(line,date) 

, но он не работает для даты переменной и я получаю следующее сообщение об ошибке. Может ли кто-нибудь помочь?

TypeError: Can't convert 'int' object to str implicitly 
+0

Не совсем понятно, что вы пытаетесь сделать. 'строка' - это строка, которую вы не можете добавить в' int' 3 –

+0

Да, хотелось бы определить переменную ** date **, которая всегда будет трех строк после версии. Я не уверен, как это сделать – UserYmY

+0

enumerate() ленив - значит, у вас нет других линий, доступных в тот момент. Они будут «прочитаны», когда они понадобятся. Если вы хотите получить остальные 3 строки, вам нужно будет загрузить полный файл раньше, а затем разрезать его или использовать механизм состояния. – TryToSolveItSimple

ответ

1

line - это строка содержимого строки в файле. i - инкрементно возрастающий индекс анализируемой строки. Поэтому вы хотите прочитать номер строки i+3. Вы можете легко читать три строки, если вы прочитаете все строки в памяти с помощью .readlines().
ПРИМЕЧАНИЕ это нецелесообразно, если ваши файлы очень большие!

with open(input_file1,'r') as f: 
    lines = f.readlines() 
    for i, line in enumerate(lines): 
     if line.startswith('Version'): 
      version = line.strip() 
      date = lines[i + 3].strip() 
      print(line,date) 
0

Что сообщение об ошибке сообщает вам, что вы не можете добавить число в строку.

Сначала вам нужно преобразовать строку в объект datetime, к которому вы можете добавить все, что захотите.

Проверьте datetime documentation here.

В вашем случае, вы можете попробовать что-то вроде:

import datetime 
Date = datetime.datetime.strptime(line, "%m/%d/%Y") 

Если второй набор аргументов определяют формат даты вы кормите объект DATETIME через переменную линии. Вам придется изменить этот бит («% m /% d /% Y»), чтобы он соответствовал вашему входу.

Смежные вопросы