2014-11-21 7 views
0

Мой файл содержит текст, как показано ниже:Поиск дубликатов текста в файле в Python

# ER 1 - Text a 
info sms ver=xxxxxxxx 

# ER 2 - Text b 
info call ver=xxxxxxxx 

# ER 3 - Text c 
info sms ver=yyyyyyyy 

# ER 4 - Text d 
info mms ver=xxxxxxxx 

# ER 5 - Text e 
info call ver=yyyyyyyy 

Я хотел бы, чтобы уведомить пользователя о том, «смс» & «называют» существует в нескольких местах файла. выход должен быть, как показано ниже:

info sms exists in mutiple places of the file 
info call exists in mutiple places of the file 

мне нужно искать все строки, начинается с инфо «текст» версия = ... и найти, если «текст» существует в любом другом месте файла и уведомления " текст "существует в нескольких местах файла.

+2

Пожалуйста, поделитесь своими усилиями. –

+0

мне удалось получить все необходимые текст в файл, как показано ниже: смс смс вызов вызов ммс Bluetooth телефония Моя идея заключается в том, чтобы найти эти повторяющиеся строки в файле. Я должен сделать другой идентичный файл с тем же текстом и сравнить два файла по очереди и распечатать дубликаты. У кого-нибудь есть идея? Спасибо – Priya

+0

Спасибо mu за редактирование моего вопроса в удобочитаемой форме. – Priya

ответ

0

Предположительно, вы разбираете этот файл в какой-то значимой структуре данных в своей программе. Допустим, вы в конечном итоге с объектом под названием info, со всем, что вы заботитесь о существующих в качестве атрибутов на нем - то есть, вы могли бы сделать что-то вроде:

print(info.sms) 

распечатывать информацию, которую вы читали в

.

Это означает, что когда вы сначала читаете данные, сначала определяете, в каком поле вы хотите сохранить его, а затем сохраните.

Итак, вопрос в том, каково исходное состояние этого объекта до, вы заполнили это поле? Обычные параметры заключаются в том, что либо у него просто нет поля там (вы создаете его, назначая ему в первый раз), либо оно имеет какое-то значение по умолчанию (часто None). Вы можете проверить любой случай довольно легко - в первом (вероятно, более вероятном случае), вы делаете if hasattr(info, 'sms'):. Во втором - if info.sms is not None:. Эти проверки будут успешными, если поле уже имеет значение - это значит, что вы уже прочитали другое значение для него в этом файле и имеет несколько записей.

Итак, ваш код выглядит примерно так:

for line in file: 
    # Work out what field we want to assign. Say its 'sms' 
    if hasattr(info, 'sms'): 
     print('info sms exists in multiple places of the file') 
    info.sms = parse_value(line) # Or however you parse it 
0

Я бы пойти на регулярное выражение:

import re 
text="# ER 1 - Text a\ninfo sms ver=xxxxxxxx\n\n# ER 2 - Text b\ninfo call ver=xxxxxxxx\n\n# ER 3 - Text c\ninfo sms ver=yyyyyyyy\n\n# ER 4 - Text d\ninfo mms ver=xxxxxxxx\n\n# ER 5 - Text e\ninfo call ver=yyyyyyyy" 
match1="info (.*) [^info]*" 

print re.findall(match1,text) # -> ['sms', 'call', 'sms', 'mms', 'call'] 

Вы, вероятно, может понять, как посчитать их самостоятельно.

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