Python считывает входные строки через вызов функции

#python #file #text #input

#python #файл #текст #ввод

Вопрос:

Мой приведенный ниже код отлично работает для получения моих входных данных (list.txt ) и верните на экран строки от 2 до 5.

 def get_list():

    file = open('list.txt', 'r')
    lines = file.read().splitlines()[2:5]
    print (lines)

get_list()
  

Однако мне необходимо реализовать что-то, где я могу вызвать функцию, например:

 get_list()[2:5] 
  

и вместо этого это будет печатать между строками 2 и 5. Может кто-нибудь предложить возможный способ, которым я могу это сделать? Спасибо!

Комментарии:

1. Затем верните весь lines список из вашей функции.

2. Вы также захотите закрыть свой файл. Вы можете использовать with для автоматического закрытия файла, когда закончите с ним

3. Это, конечно, возможно , но я не уверен, что это действительно разумно . 🙂

4. Вы действительно имеете в виду, что get_list()[2:5] должны печатать выбранные строки, или вы просто хотите, чтобы он возвращал эти строки (например, в списке или кортеже)?

Ответ №1:

Как я упоминал в комментариях к вопросу, это неразумно, но вот как это можно сделать. Чтобы протестировать этот код, я создал текстовый файл, содержащий целые числа от 0 до 9, используя команду GNU coreutils seq :

 seq 0 9 >list.txt
  

И вот код Python:

 class AutoPrint(object):
    def __init__(self, data):
        self.data = data

    def __getitem__(self, idx):
        for row in self.data[idx]:
            print(row)

def get_list(fname):
    with open('list.txt') as f:
        data = f.read().splitlines()
    return AutoPrint(data)

get_list('list.txt')[2:5]
  

вывод

 2
3
4
  

Но, пожалуйста, не делайте таких сумасшедших вещей в реальном коде! Мой __getitem__ метод возвращает None ; __getitem__ предполагается, что правильный возвращает выбранные элементы. И у него не должно быть сумасшедших побочных эффектов, таких как печать. OTOH, я думаю, пока вы разрабатываете код, ему может быть удобно печатать (или регистрировать) материал, чтобы вы знали, что он делает то, что вы ожидаете от него.

Комментарии:

1. Спасибо за подробный ответ. Я понимаю, что это не очень хорошая вещь, чтобы иметь это в виду.

Ответ №2:

 def get_list():

   with open('list.txt', 'r') as file:
       lines = file.read().splitlines()
   return lines

print(get_list()[2:5])
  

Комментарии:

1. @Shaikhar: этот код будет печатать все строки …. не указанные строки, т.Е. [2: 5]

2. @mahendrakamble OP необходимо вызвать функцию, а затем решить, какие строки печатать.

3. Это действительно работает, я тупо напечатал в своей функции, а не «вернул» строку. Спасибо.

Ответ №3:

Просто возвращайте строки!

 def get_list():

    file = open('list.txt', 'r')
    lines = file.read().splitlines()
    return lines
  

Комментарии:

1. Однако это не приведет к печати строк.