Чтение из файла и удаление \ n и пробелов - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь, чтобы python прочитал некоторые строки текста из файла, а затем преобразовал их в хэш md5 для сравнения с тем, который ввел пользователь.

Я использую f = open(file, 'r'), чтобы открывать и читать файлы, и все работает нормально, но когда оно хэширует слово, это не тот хэш для этого слова.

Так что мне нужно знать, как убрать пробелы или \n в конце, что приводит к неправильному хешированию.

Если это имеет смысл. Я действительно не знал, как это сказать.

код: http://pastebin.com/Rdticrbs

Ответы [ 4 ]

3 голосов
/ 17 января 2012

Я только что переписал твой код для вставки, потому что это нехорошо.Почему вы написали это рекурсивно?(Строка sys.setrecursionlimit(10000000), вероятно, должна указывать на то, что вы делаете что-то не так!)

import md5
hashed = raw_input("Hash:")
with open(raw_input("Wordlist Path: ")) as f:
    for line in f:
        if md5.new(line.strip()).hexdigest() == hashed:
            print(line.strip())
            break
    else:
        print("The hash was not found. Please try a new wordlist.")

    raw_input("Press ENTER to close.")

Это, очевидно, будет медленным, потому что каждый раз хэширует каждое слово в списке слов.Если вы собираетесь искать более одного слова в списке слов, вы должны вычислить (один раз) отображение хэшей на слова (таблица обратного просмотра) и использовать это.Вам может потребоваться крупномасштабная библиотека хранения значений ключей , если ваши списки слов большие.

1 голос
/ 17 января 2012

Вы можете просто открыть файл так:

with open('file', 'r') as f:
    for line in f:
         do_somthing_with(line.strip())

Из официальной документации strip() будет возвращать копию строки с удаленными начальными и последними символами.

Редактировать: Я исправляю свою ошибку благодаря комментарию katrielalex (я не знаю, почему я поверил в то, что написал раньше). Мои извинения.

0 голосов
/ 17 января 2012
def readStripped(path):
    with open('file') as f:
        for line in f:
            yield f.strip()

dict((line, yourHash(line)) for line in readStripped(path))
0 голосов
/ 17 января 2012

str.strip([chars])

Возвращает копию строки с начальными и последними символами удален. Аргумент chars - это строка, определяющая набор символы для удаления. Если опущен или отсутствует, аргумент chars по умолчанию удаляет пробелы. Аргумент chars не является префиксом или суффикс; скорее, все комбинации его значений удалены:

>>> s = "  Hello   \n".strip()
>>> print(s)
... Hello

В своем коде добавьте это.

words = lines[num].strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...