2016-04-21 1 views
0

У меня есть скрипт Python, который печатает случайно сгенерированный пароль, а затем печатает его в текстовый файл, добавляя новую строку каждый раз, когда она вызывается. Например:Python - готовый текстовый файл и количество отчетов для отдельных символов

PSWD = (str(pswd01)) + (str(pswd02)) + (str(pswd03)) + (str(pswd04)) 
# Note, variables pswd01, pswd02 etc are randomly created earier in the script. 

print(PSWD) 


with open('PSWD_output.txt','a') as f: 
    f.write(PSWD + '\n') 
f.close() 

Примечание: переменная PSWD содержит строчные буквы, верхний регистр и цифры.

Затем я хочу прочитать файл и подсчитать количество отдельных символов и распечатать отчет в другом текстовом файле, но не знаю, как я могу это сделать. Я задал аналогичный вопрос here, в котором объясняется, как печатать отчет персонажа на консоли.

Любая идея, как я могу читать PSWD_output.txt и считать каждый другой символ, записывая результат в отдельный текстовый файл?

Любая помощь оценена!

ответ

3

Используйте словари для подсчета символов повторить, как показано ниже:

my_dictionary = {} 

f = open('PSWD_output.txt','r') 
line = f.readline() 
while(line): 
    for letter in line: 
     if letter in my_dictionary: 
      my_dictionary[letter] +=1 
     else: 
      my_dictionary[letter] = 1 
    line = f.readline() 

print my_dictionary 

Для текстового файла, содержащего :

salam 
asjf 
asjg; 
asdkj 
14kj'asdf 

5 

возвращается:

>>> ================================ RESTART ================================ 
>>> 
{'a': 6, 'j': 4, 'd': 2, 'g': 1, 'f': 2, 'k': 2, '\n': 6, 'm': 1, 'l': 1, "'": 1, '1': 1, 's': 5, '5': 1, '4': 1, ';': 1} 
>>> 
+0

Это было в значительной степени именно то, что я искал, огромное спасибо! Теперь я сохраняю этот словарь в отдельном выходном файле, но хочу его в более удобном для пользователя формате. Должен ли форматировать словарь перед печатью/записью в файл? В качестве альтернативы, мой другой вариант состоял бы в том, чтобы затем прочитать файл еще раз (после написания словаря на нем) и попробовать и отформатировать его таким образом, но не знаете, как это сделать. Любые идеи? Благодаря! – Klicker

2

Вы можете использовать Counter. Он принимает итератор (и строки итерации: перебрать символы) и сохраняет результат в качестве словаря

>>> from collections import Counter 
>>> c = Counter("foobarbaz") 
>>> c 
Counter({'o': 2, 'a': 2, 'b': 2, 'z': 1, 'f': 1, 'r': 1}) 
>>> c.most_common(2) 
[('o', 2), ('a', 2)] 
Смежные вопросы