2015-06-10 2 views
0

Я в настоящее время занимаюсь программированием на программировании на компьютере Python по GCSE, но я столкнулся с некоторой проблемой, и я не могу найти ответ.Чтение и печать специальных строк в Python

У меня есть часть кода, которая должна считываться из файла и печатать часть файла. Мой код можно увидеть ниже:

#Welcome Message 
print("Hello and welcome to the client activity recorder. \nHere you will be able to see and asign exercise levels to clients.") 

#Open file for reading. 
client_file_read = open("clientIntensity.txt","r") 
print_content = client_file_read.read() 
print(print_content) 

#Client Selection 
print("Please type the client ID of the person you wish to check what relevant activities apply:") 
client_ID = input() 
if client_ID == ("NeQua"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
elif client_ID == ("RoDen"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
elif client_ID == ("BrFre"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
elif client_ID == ("KaDat"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
elif client_ID == ("ViRil"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
elif client_ID == ("TrGeo"): 
    with open("exerciseActivities.txt") as f: 
     print("For the supplied Client ID the following activities are available: \n") 
     for x in range (6): 
      line = f.readline() 
      print(line) 
      f.close 
else: 
    with open("exerciseActivities.txt") as f: 

Ниже приводится копия файла, который я использую, чтобы читать:

High 
Running 
Swimming 
Aerobics 
Football 
Tennis 

Moderate 
Walking 
Hiking 
Cleaning 
Skateboarding 
Basketball 

Как вы можете видеть суб программу Элифа все печатают первые 6 строки файла, но в последней команде else я хотел бы, чтобы программа печатала последние 6 строк файла выше. Помощь была бы очень признательна, поскольку я исчерпал любые идеи, которые я имею о том, как это сделать.

С наилучшими пожеланиями

+2

Не думаю, что я когда-либо слышал о 'elif's именуемых – Jules

ответ

1

Просто откройте файл один раз сохранить первые шесть линий и нам in:

with open("exerciseActivities.txt") as f: 
    first_six = [next(f) for _ in range(6)] 
    if client_ID in {"NeQua","RoDen","BrFre","KaDat","ViRil","TrGeo"}: 
     print("For the supplied Client ID the following activities are available: \n")  
     for line in first_six: 
      print(line) 
    else: 
     next(f) # skip empty line 
     for line in f: 
      print(line) 

Объект файл возвращает свой итератор так после первого [next(f) for _ in range(6)] указатель файла будет на седьмом так что мы просто начинаем оттуда в другом. Вы делаете то же самое каждый раз, когда if client_ID == "NeQua" и т. Д., Поэтому, используя in для проверки членства, вы увидите, соответствует ли client_ID любой из строк, которые вы проверяете, если мы не печатаем последние шесть строк.

1

Это один из способов напечатать последние 6 строк: «подразделам программы»

from collections import deque 

with open("exerciseActivities.txt", 'r') as f: 
    last6_lines = deque(f, 6) 
    x = list(last6_lines) 
    y = ''.join(x) 
    print (y) 
+0

Быстрая проверка моего редактирования: 'f.close' в конце была опечатка, правильно? Я полностью удалил его ... поскольку вы находитесь в 'with open():', 'f' автоматически' close'd, когда 'with' statement' __exit__'s. – ArtOfWarfare

+0

@ArtOfWarfare Да, конечно, спасибо! –

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