#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. Однако это не приведет к печати строк.