Чтение файла с использованием Python и посмотреть, есть ли конкретная строка в файле - PullRequest
0 голосов
/ 09 августа 2010

У меня есть файл в следующем формате

Summary;None;Description;Emails\nDarlene\nGregory Murphy\nDr. Ingram\n;DateStart;20100615T111500;DateEnd;20100615T121500;Time;20100805T084547Z
Summary;Presence tech in smart energy management;Description;;DateStart;20100628T130000;DateEnd;20100628T133000;Time;20100628T055408Z
Summary;meeting;Description;None;DateStart;20100629T110000;DateEnd;20100629T120000;Time;20100805T084547Z
Summary;meeting;Description;None;DateStart;20100630T090000;DateEnd;20100630T100000;Time;20100805T084547Z
Summary;Balaji Viswanath: Meeting;Description;None;DateStart;20100712T140000;DateEnd;20100712T143000;Time;20100805T084547Z
Summary;Government Industry Training:  How Smart is Your City - The Smarter City Assessment Tool\nUS Call-In Information:  1-866-803-2143\,     International Number:  1-210-795-1098\,     International Toll-free Numbers:  See below\,     Passcode:  6785765\nPresentation Link - Copy and paste URL into web browser:  http://w3.tap.ibm.com/medialibrary/media_view?id=87408;Description;International Toll-free Numbers link - Copy and paste this URL into your web browser:\n\nhttps://w3-03.sso.ibm.com/sales/support/ShowDoc.wss?docid=NS010BBUN-7P4TZU&infotype=SK&infosubtype=N0&node=clientset\,IA%7Cindustries\,Y&ftext=&sort=date&showDetails=false&hitsize=25&offset=0&campaign=#International_Call-in_Numbers;DateStart;20100811T203000;DateEnd;20100811T213000;Time;20100805T084547Z

Теперь мне нужно создать функцию, которая выполняет следующее:

Аргумент функции будет указывать, какую строку читать, и позволятьскажем, я уже выполнил line.split (;)

  1. Проверьте, есть ли где-нибудь в строке [1] «встреча» или «звонок по номеру», и посмотрите, есть ли «встреча» илиЗвоните по номеру "где угодно в строке [2].Если любое из этих двух значений истинно, функция должна возвращать «собрание по вызову».В противном случае он должен вернуть «None Inferred».

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 09 августа 2010

Построение ответа ghostdog74:

def finder(line):
    '''Takes line number as argument. First line is number 0.'''
    with open('/home/vlad/Desktop/file.txt') as f:
        lines = f.read().split('Summary')[1:]
        searchLine = lines[line]
        if 'meeting' in searchLine.lower() or 'call in number' in searchLine.lower():
            return 'call-in meeting'
        else:
            return 'None Inferred'

Я не совсем понимаю, что вы имели в виду под line[1] и line[2], так что это лучшее, что я мог сделать.

РЕДАКТИРОВАТЬ: Исправлена ​​проблема с \n.Я полагаю, поскольку вы ищете meeting и call in number, вам не нужен Summary, поэтому я использовал его, чтобы разбить строки.

1 голос
/ 09 августа 2010

vlad003 правильно: если у вас есть символы новой строки в строках;они будут новыми линиями!В этом случае вместо этого я бы разделил «Сводка»:

import itertools

def chunks( filePath ):
    "Since you have newline characters in each section,\
    you can't read each line in turn. This function reads\
    lines of the file and splits them into chunks, restarting\
    each time 'Summary' starts a line."
    with open( filePath ) as theFile:
        chunk = [ ]
        for line in theFile:
            if line.startswith( "Summary" ):
                if chunk: yield chunk
                chunk = [ line ]
            else:
                chunk.append( line )
        yield chunk

def nth(iterable, n, default=None):
    "Gets the nth element of an iterator."
    return next(islice(iterable, n, None), default)

def getStatus( chunkNum ):
    "Get the nth chunk of the file, split it by ";", and return the result."
    chunk = nth( chunks, chunkNum, "" ).split( ";" )
    if not chunk[ 0 ]:
        raise SomeError # could not get the right chunk
    if "meeting" in chunk[ 1 ].lower() or "call in number" in chunk[ 1 ].lower():
        return "call-in meeting"
    else:
        return "None Inferred"

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

1 голос
/ 09 августа 2010

используйте оператор in, чтобы увидеть, есть ли совпадение

for line in open("file"):
    if "string" in line :
        ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...