2016-07-19 3 views
0

Я пытаюсь сделать функцию, которая, учитывая ввод данных пользователя, может сопоставлять входные данные со списком строк в текстовом файле и возвращать целое число, соответствующее строке в файле , По сути, я проверяю, находится ли вход пользователя в файле и возвращает индекс соответствующей строки в файле. У меня есть рабочая функция, но она кажется медленной и подверженной ошибкам.Сопоставление ввода пользователя с текстовым списком

def parseInput(input): 
    Gates = [] 
    try: 
     textfile = open("words.txt") 
     while nextLine: 
      nextLine = textfile.readline() 
      Gates[n] = nextLine #increment n somewhere 
    finally: 
     textfile.close() 
    while n <= len(Gates): 
     nextString = Gates[n] 
     if input in nextString: 
      #Exit loop 
    with open("wordsToInts.txt") as textfile: 
     #Same procedure as the try loop(why isn't that one a with loop?) 
     if(correct): 
      return number 

Это кажется довольно ... плохим. Кажется, я просто не думаю, что это лучший способ сделать это. У меня есть полный контроль над words.txt и wordsToInts.txt (следует ли объединить их?), Поэтому я могу отформатировать их, как мне заблагорассудится. Я ищу предложения re: сама функция, но если бы мне помогли изменения в текстовых файлах, я бы хотел знать. Моя цель - уменьшить причину ошибки, но позже я добавлю проверку ошибок. Пожалуйста, предложите лучший способ написать эту функцию. Если вы пишете код, используйте Python. Однако псевдокод прекрасен.

ответ

0

Я бы сказал, чтобы объединить файлы. Вы можете иметь ваши слова и соответствующие им значения следующим образом:

words.txt

string1|something here 
string2|something here 

Затем вы можете хранить каждую строку как запись в словарь и вспомнить значение, основанное на вашем входе:

def parse_input(input): 
    word_dict = {} 
    with open('words.txt') as f: 
     for line in f.readlines(): 
      line_key, line_value = line.split('|', 1) 
      word_dict[line_key] = line_value.rstrip('\n') 
    try: 
     return word_dict[input] 
    except KeyError: 
     return None 
0

Я пытаюсь сделать функцию, которая, учитывая ввод от пользователя, можно сопоставить ввод в список строк в текстовом файле, и возвращает некоторое целое-корреспондент onding к строке в файле. По существу, я проверяю, что пользовательский ввод в файл и возвращает индекс строки соответствия в файле

def get_line_number(input): 
    """Finds the number of the first line in which `input` occurs. 

    If input isn't found, returns -1. 
    """ 
    with open('words.txt') as f: 
     for i, line in enumerate(f): 
      if input in line: 
       return i 
    return -1 

Эта функция будет соответствовать спецификации из вашего описания с дополнительным предположением, что строка, забота о которых находится на отдельных линиях. Известные вещи:

  1. Файловые объекты в Python действуют как итераторы по строкам их содержимого. Вам не нужно читать строки в списке, если вам нужно всего лишь проверить каждую отдельную строку.

  2. enumerate функция принимает итератор и возвращает генератор, дающий кортеж как (index, element), где element является элементом в вашем итератора и индекса является его положение внутри итератора.

    • Термин «итератор» означает любой объект, который представляет собой последовательность вещей, к которым вы можете получить доступ в цикле for.
    • Термин генератор означает объект, который генерирует элементы для итерации через «на лету». В этом случае это означает, что вы можете получить доступ к каждой строке файла один за другим, не загружая весь файл в память вашего компьютера.
  3. Эта функция написана в стандартном стиле Pythonic, с docstring, соответствующей оболочкой с именами переменных и описательным именем.

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