Próbuję dodać content_ids z 2 list i próbuję dopasować do innej listy. Z jakiegoś powodu dopasowanie nie działa ze względu na typ. Załączam kod poniżej.

import os, csv, re, xlwt

from openpyxl import load_workbook import glob import lxml.etree as et


CATLOG_REPORT_PATH = '/Users/rradhakrishnan/rradhakrishnan/catalogReport.xlsx' 
MASTER_XML_PATH = '/Users/rradhakrishnan/rradhakrishnan/FTP/' 
MEDIA_PATH = '/Users/rradhakrishnan/rradhakrishnan/media' 
DST_PATH = '/Users/rradhakrishnan/rradhakrishnan/toIngest/' 
DESTINATION_PATH = '/Users/rradhakrishnan/rradhakrishnan/matched_content_ids.txt'


def read_workbook(source_path):
    wb = load_workbook(source_path, data_only=True)
    ws = wb.get_sheet_by_name('catalogReport_Titles')
    catalog_ids = list()

    for i, row in enumerate(ws.rows):
        if i == 0:
            continue
        content_id, title = map(lambda c: unicode(c.value), row[0:2])
        catalog_ids.append([content_id.encode("utf-8")])
    watch_folder(catalog_ids)

def watch_folder(final_ids):
    movies = glob.glob(os.path.join(MEDIA_PATH, u'M*.ts'))
    movie = []
    for filename in movies:
        movie =  filename.rsplit('/', 1)[-1]
        movie_name = re.search('(.+?).ts',movie)
        final_ids.append(movie_name.group(1).encode("utf-8"))
    xml_parse(final_ids)

def xml_parse(ids):
    filecount = 0
    asset_metadata = glob.glob(os.path.join(MASTER_XML_PATH, u'*.xml'))
    to_ingest = []
    content_id = []
    for p in asset_metadata:
        filecount += 1
        tree = et.parse(p)
        root = tree.getroot()
        programs = root.xpath('Program[@title="Program"]')
        if len(programs) == 0:
            return None
        program = programs[0]
        # Get the Content ID
        c_id = program.xpath('props/*[@title="Content ID"]')
        if len(c_id) == 0:
            content_id = None
        else:
            content_id = c_id[0].text
            if content_id not in ids:
                print content_id
                print "Copying file no: " , filecount
            else:
                print "file exists", content_id

def main():
    read_workbook(CATLOG_REPORT_PATH)


if __name__ == '__main__':
    main()

Istnieją 4 wspólne content_ids i spodziewam się, że skopiuje tylko 11 z 15 plików.

Wynik wygląda jak poniżej.

Copying file no:  10
MZ009828
Copying file no:  11
MZ009827
Copying file no:  12
MN022736
Copying file no:  13
MZ009836
Copying file no:  14
MZ009834
Copying file no:  15

Załączam jak wygląda MEDIA_PATH. tu wpisz opis obrazu

Jak mogę przejść do innego stanu, w którym zostanie wydrukowany komunikat „Plik istnieje”?

0
Roshan r 16 grudzień 2019, 07:13

1 odpowiedź

Musisz utworzyć listę identyfikatorów połączeń przed wejściem do pętli. Zastąpiłem listę content_id, ponieważ nie ma sensu ją tam inicjować (poza tym content_id jest ciągiem znaków w pętli).

Dodatkowo musisz dołączyć content_id w każdej pętli do listy ids na końcu każdej pętli, aby przyszłe pętle mogły się z nią porównać.

def xml_parse(ids):
    filecount = 0
    asset_metadata = glob.glob(os.path.join(MASTER_XML_PATH, u'*.xml'))
    to_ingest = []
    helper_ids = []
    for p in asset_metadata:
        filecount += 1
        tree = et.parse(p)
        root = tree.getroot()
        programs = root.xpath('Program[@title="Program"]')
        if len(programs) == 0:
            return None
        program = programs[0]
        # Get the Content ID
        c_id = program.xpath('props/*[@title="Content ID"]')
        if len(c_id) == 0:
            content_id = None
        else:
            content_id = c_id[0].text
            if content_id not in helper_ids:
                print content_id
                print "Copying file no: " , filecount
            else:
                print "file exists", content_id
        helper_ids += c_id.text

Edycja: zmieniono nazwy identyfikatorów

0
Julian Chan 17 grudzień 2019, 05:23
To nie jest poprawne. Przekazuję listę do identyfikatorów i jeśli ids=[] to jest to pusta lista.
 – 
Roshan r
16 grudzień 2019, 20:28
Naprawiony. Po prostu nazwij to inaczej.
 – 
Julian Chan
17 grudzień 2019, 05:24