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.
Jak mogę przejść do innego stanu, w którym zostanie wydrukowany komunikat „Plik istnieje”?
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
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.