So I am trying to convert a data driven pages script from Python 2.7 to map series Python 3.
My original script, I had an attribute that sometimes had a file path stored in it, and whenever I would get to a specific page in the DDP, I would store the possible row value as a variable, check if it existed, & append it to my PDF if it did.
Original Script:
pageID <SPAN class="operator token">=</SPAN> parMXD1<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>getPageIDFromName<SPAN class="punctuation token">(</SPAN>UPI<SPAN class="punctuation token">)</SPAN>
parMXD1<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>currentPageID <SPAN class="operator token">=</SPAN> pageID
finalPDF <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>folder<SPAN class="punctuation token">,</SPAN> UPI<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN>
parMXD1<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>exportToPDF<SPAN class="punctuation token">(</SPAN>finalPDF<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#The attribute with possible sketch pathway</SPAN>
comSketch <SPAN class="operator token">=</SPAN> parMXD1<SPAN class="punctuation token">.</SPAN>dataDrivenPages<SPAN class="punctuation token">.</SPAN>pageRow<SPAN class="punctuation token">.</SPAN>COMMERCIAL_SKETCH
<SPAN class="comment token">#opens first PRC Page</SPAN>
prc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>PDFDocumentOpen<SPAN class="punctuation token">(</SPAN>finalPDF<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>comSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
prc<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>comSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
prc<SPAN class="punctuation token">.</SPAN>saveAndClose<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Now, in my code for the map series, if the attribute is Null, it is not letting me store that row as a variable & checking to see if it exists.
Current Script:
mxdFile <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mp<SPAN class="punctuation token">.</SPAN>ArcGISProject<SPAN class="punctuation token">(</SPAN>mxdPath<SPAN class="punctuation token">)</SPAN>
cleanName <SPAN class="operator token">=</SPAN> name<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"/"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"_"</SPAN><SPAN class="punctuation token">)</SPAN>
finalPDF <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> cleanName <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN><SPAN class="punctuation token">)</SPAN>
l <SPAN class="operator token">=</SPAN> mxdFile<SPAN class="punctuation token">.</SPAN>listLayouts<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Page_1"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> l<SPAN class="punctuation token">.</SPAN>mapSeries <SPAN class="keyword token">is</SPAN> None<SPAN class="punctuation token">:</SPAN>
ms <SPAN class="operator token">=</SPAN> l<SPAN class="punctuation token">.</SPAN>mapSeries
<SPAN class="keyword token">if</SPAN> ms<SPAN class="punctuation token">.</SPAN>enabled<SPAN class="punctuation token">:</SPAN>
ms<SPAN class="punctuation token">.</SPAN>currentPageNumber <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>getPageNumberFromName<SPAN class="punctuation token">(</SPAN>name<SPAN class="punctuation token">)</SPAN>
file <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> cleanName<SPAN class="punctuation token">)</SPAN>
ms<SPAN class="punctuation token">.</SPAN>exportToPDF<SPAN class="punctuation token">(</SPAN>file<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">,</SPAN> resolution<SPAN class="operator token">=</SPAN><SPAN class="number token">300</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">#Checks for existence of Sketch PDF & appends it to new PDF</SPAN>
commSketch <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>pageRow<SPAN class="punctuation token">.</SPAN>COMMERCIAL_SKETCH
<SPAN class="keyword token">if</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>commSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
pdfDoc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mp<SPAN class="punctuation token">.</SPAN>PDFDocumentOpen<SPAN class="punctuation token">(</SPAN>finalPDF<SPAN class="punctuation token">)</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>file2<SPAN class="punctuation token">)</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>saveAndClose<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
I have struggled with trying to access via row objects, search cursors, and for loops, and I am not having any luck trying to store that attribute and check for if it is Null or not.
Update:
This is script I am testing to make a function so that I can call it in multiprocessing for creating about 140,000 multi-page PDFs.
<SPAN class="keyword token">import</SPAN> os<SPAN class="punctuation token">,</SPAN> sys
<SPAN class="keyword token">import</SPAN> arcpy
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">worker</SPAN><SPAN class="punctuation token">(</SPAN>mxdPath<SPAN class="punctuation token">,</SPAN> outFolder<SPAN class="punctuation token">,</SPAN> name<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">try</SPAN><SPAN class="punctuation token">:</SPAN>
mxdFile <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mp<SPAN class="punctuation token">.</SPAN>ArcGISProject<SPAN class="punctuation token">(</SPAN>mxdPath<SPAN class="punctuation token">)</SPAN>
cleanName <SPAN class="operator token">=</SPAN> name<SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"/"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"_"</SPAN><SPAN class="punctuation token">)</SPAN>
finalPDF <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> cleanName <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN><SPAN class="punctuation token">)</SPAN>
l <SPAN class="operator token">=</SPAN> mxdFile<SPAN class="punctuation token">.</SPAN>listLayouts<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Page_1"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> l<SPAN class="punctuation token">.</SPAN>mapSeries <SPAN class="keyword token">is</SPAN> None<SPAN class="punctuation token">:</SPAN>
ms <SPAN class="operator token">=</SPAN> l<SPAN class="punctuation token">.</SPAN>mapSeries
<SPAN class="keyword token">if</SPAN> ms<SPAN class="punctuation token">.</SPAN>enabled<SPAN class="punctuation token">:</SPAN>
ms<SPAN class="punctuation token">.</SPAN>currentPageNumber <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>getPageNumberFromName<SPAN class="punctuation token">(</SPAN>name<SPAN class="punctuation token">)</SPAN>
file <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> cleanName<SPAN class="punctuation token">)</SPAN>
ms<SPAN class="punctuation token">.</SPAN>exportToPDF<SPAN class="punctuation token">(</SPAN>file<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">,</SPAN> resolution<SPAN class="operator token">=</SPAN><SPAN class="number token">300</SPAN><SPAN class="punctuation token">)</SPAN>
pdfDoc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mp<SPAN class="punctuation token">.</SPAN>PDFDocumentOpen<SPAN class="punctuation token">(</SPAN>finalPDF<SPAN class="punctuation token">)</SPAN>
l2 <SPAN class="operator token">=</SPAN> mxdFile<SPAN class="punctuation token">.</SPAN>listLayouts<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Page_2"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> l2<SPAN class="punctuation token">.</SPAN>mapSeries <SPAN class="keyword token">is</SPAN> None<SPAN class="punctuation token">:</SPAN>
ms2 <SPAN class="operator token">=</SPAN> l2<SPAN class="punctuation token">.</SPAN>mapSeries
<SPAN class="keyword token">if</SPAN> ms2<SPAN class="punctuation token">.</SPAN>enabled<SPAN class="punctuation token">:</SPAN>
ms2<SPAN class="punctuation token">.</SPAN>currentPageNumber <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>getPageNumberFromName<SPAN class="punctuation token">(</SPAN>name<SPAN class="punctuation token">)</SPAN>
pageTwo <SPAN class="operator token">=</SPAN> cleanName <SPAN class="operator token">+</SPAN> <SPAN class="string token">"t2"</SPAN>
file2 <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> pageTwo <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN><SPAN class="punctuation token">)</SPAN>
ms2<SPAN class="punctuation token">.</SPAN>exportToPDF<SPAN class="punctuation token">(</SPAN>file2<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">,</SPAN> resolution<SPAN class="operator token">=</SPAN><SPAN class="number token">300</SPAN><SPAN class="punctuation token">)</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>file2<SPAN class="punctuation token">)</SPAN>
os<SPAN class="punctuation token">.</SPAN>remove<SPAN class="punctuation token">(</SPAN>file2<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># ms.refresh()</SPAN>
resSketch <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>pageRow<SPAN class="punctuation token">.</SPAN>SKETCH
<SPAN class="keyword token">if</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>resSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
l3 <SPAN class="operator token">=</SPAN> mxdFile<SPAN class="punctuation token">.</SPAN>listLayouts<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Page_3"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> l3<SPAN class="punctuation token">.</SPAN>mapSeries <SPAN class="keyword token">is</SPAN> None<SPAN class="punctuation token">:</SPAN>
ms3 <SPAN class="operator token">=</SPAN> l3<SPAN class="punctuation token">.</SPAN>mapSeries
<SPAN class="keyword token">if</SPAN> ms3<SPAN class="punctuation token">.</SPAN>enabled<SPAN class="punctuation token">:</SPAN>
ms3<SPAN class="punctuation token">.</SPAN>currentPageNumber <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>getPageNumberFromName<SPAN class="punctuation token">(</SPAN>name<SPAN class="punctuation token">)</SPAN>
pageThree <SPAN class="operator token">=</SPAN> cleanName <SPAN class="operator token">+</SPAN> <SPAN class="string token">"t3"</SPAN>
file3 <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>outFolder<SPAN class="punctuation token">,</SPAN> pageThree <SPAN class="operator token">+</SPAN> <SPAN class="string token">".pdf"</SPAN><SPAN class="punctuation token">)</SPAN>
ms3<SPAN class="punctuation token">.</SPAN>exportToPDF<SPAN class="punctuation token">(</SPAN>file3<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">,</SPAN> resolution<SPAN class="operator token">=</SPAN><SPAN class="number token">300</SPAN><SPAN class="punctuation token">)</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>file3<SPAN class="punctuation token">)</SPAN>
os<SPAN class="punctuation token">.</SPAN>remove<SPAN class="punctuation token">(</SPAN>file3<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">del</SPAN> file3<SPAN class="punctuation token">,</SPAN> resSketch
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">pass</SPAN>
<SPAN class="comment token">#Checks for existence of Sketch PDF & appends it to new PDF</SPAN>
commSketch <SPAN class="operator token">=</SPAN> ms<SPAN class="punctuation token">.</SPAN>pageRow<SPAN class="punctuation token">.</SPAN>COMMERCIAL_SKETCH
<SPAN class="keyword token">if</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>commSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>appendPages<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>commSketch<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">pass</SPAN>
pdfDoc<SPAN class="punctuation token">.</SPAN>saveAndClose<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">except</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ExecuteError<SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># Geoprocessor threw an error</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddError<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>GetMessages<SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Execute Error:"</SPAN><SPAN class="punctuation token">,</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ExecuteError<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">except</SPAN> Exception <SPAN class="keyword token">as</SPAN> e<SPAN class="punctuation token">:</SPAN>
tb <SPAN class="operator token">=</SPAN> sys<SPAN class="punctuation token">.</SPAN>exc_info<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Failed at Line %i \n"</SPAN> <SPAN class="operator token">%</SPAN> tb<SPAN class="punctuation token">.</SPAN>tb_lineno<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Error: {} \n"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>e<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">finally</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">del</SPAN> mxdFile<SPAN class="punctuation token">,</SPAN> pdfDoc
<SPAN class="keyword token">return</SPAN> <SPAN class="token boolean">False</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>