2017-07-19 2 views
0

In der Hoffnung, diese Frage ist nicht zu vage, oder zu viel verlangt. Im Wesentlichen analysiere ich große Mengen von Spektren und möchte eine große Webseite erstellen, die diese Spektren enthält, anstatt einzelne Spektren zu betrachten. Attached ist ein Beispiel dafür, wie das Endergebnis aussehen soll.Python: Ziehen von .png von einer Website, Ausgabe zu einem anderen

example

Jede einzelne Spektren wird aus einem massiven Bibliothek gezogen. Es ist lange her, seit ich codiert habe, also ist dies immer noch eine Lernerfahrung. Ich habe es geschafft, eine Webseite zu erstellen und ein einzelnes Spektrum zu ziehen. Aber haben Sie diese beiden nicht zusammen. Vor allem nicht in der Größenordnung von Hunderttausenden. Vermutlich handelt es sich um eine for-Schleife? Wenn jemand helfen könnte, wäre erstaunlich, zeigen Sie in eine Richtung, oder eine Vorlage. Das sollte sehr einfach sein, aber ich kämpfe. Ps.s. Ein Großteil meiner Arbeit ist jetzt in Anaconda Python

+0

https://i.stack.imgur.com/dmOz5.png Hier ist die Befestigung leid. – l1ve4science

Antwort

0

Nicht zu überraschen Sie sind wenig auf See mit diesem Projekt. Es erfordert die Kombination von Python, HTML und möglicherweise CSS.

"Jedes einzelne Spektrum wird aus einer umfangreichen Bibliothek gezogen" - In dieser Antwort nehme ich an, dass Sie die interessierenden Spektren in ein lokales Verzeichnis gezogen haben und diese auf einer lokal bereitgestellten Webseite betrachten möchten. Ich gehe auch davon aus, dass alle Png-Dateien die gleiche Größe haben.

Wenn dies richtig ist, was Sie wollen, ist eine Datei mit einfachem HTML zu erstellen, die alle Png-Dateien referenziert und sie in einer einfachen Tabelle auslegt. Dazu muss der Code in das Verzeichnis mit den Bilddateien wechseln, eine Ausgabedatei namens "index.html" öffnen (der Name ist signifikant), glob verwenden, um alle Namen der Spektrenbilder zu erhalten, und eine Schleife über die Namen schreiben die HTML für die Seite. Nachdem Sie die Datei erstellt haben Sie es lokal mit dem Kommandozeilenbefehl dienen kann

python -m http.server 8000 

können Sie dann mit dem Hinweis auf den Browser http://localhost:8000 sehen Ihre Seite. Hier

ist eine Beispielimplementierung

from glob import glob 
    import os 

    def spectra_imgs(spectra_dir, sp_format): 
     '''Return an iterable with names of all the files in the spectra_dir 
     that match the name format sp_format.''' 
     for gl_name in glob(os.path.join(spectra_dir, sp_format)): 
      yield os.path.basename(gl_name) 

    def add_img(sp_img, side, outfile): 
     ''' Add a table item to existing table. 
      sp_img is the filename of the image 
      side is "left" or "right" 
      outfile is an open file handle 
      Returns None 
     ''' 
     if side == 'left': 
      outfile.write('<tr><td class="left_img"><img src="{0}" alt={0}></td>\n"'.format(sp_img)) 
     elif side == 'right': 
      outfile.write('<td class="right_img"><img src="{0}" alt={0}></td></tr>\n"'.format(sp_img)) 
     else: 
      raise ValueError("Side must be either left or right, not {0}".format(side)) 

    def sides(): 
     ''' Return an iterator that supplies an infinite sequence of "left" and "right".''' 
     while True: 
      yield "left" 
      yield "right" 

    def write_prefix(outfile): 
     outfile.write(
     '<!DOCTYPE html>\n' 
     '<html class="spectra_page" lang="en">\n' 
     '<head>\n' 
     '<meta charset="UTF-8"/>\n' 
     '<title>Spectra Comparison Page</title>\n' 
     '<style>\n' 
     'table { width: 100%; }\n' 
     '#left_img { align-items: center }\n' 
     '#right_img { align-items: center }\n' 
     'img { height:500px; width:500px }\n' # change to whatever size you want the images displayed at 
     '</style>\n' 
     '</head>\n' 
     '<body>\n') 


    def write_suffix(outfile): 
     outfile.write(
     '</table>\n' 
     '</body>\n' 
     '</html>\n' 
     ) 

    def write_spectra_page(spectra_dir): 
     ''' Write an index.html file with all the spectra images shown. ''' 
     with open(os.join(spectra_dir, "index.html")) as outfile: 
      write_prefix(outfile) 
      for side, sp_img in zip(sides, spectra_imgs(spectra_dir,'sp*.png'): 
       add_img(sp_img, side, outfile) 
      if side == "left": 
       # need to close the table row 
       outfile.write('</tr>\n') 
      write_suffix(outfile) 
+0

Sie sind alle aus diesem https://data.sdss.org/sas/dr13/eboss/spectro/redux/images/v5_9_0/v5_9_0/4381-55824/ – l1ve4science

+0

Auch alle Bilder sind in verschiedenen Größen – l1ve4science

+0

Die 'img 'tag in der CSS wird die Bilder alle in der gleichen Größe anzeigen, aber es könnte einige dehnen, um sie fit zu machen. Sie könnten den Tag "" so ändern, dass der Browser die Bilder nicht aus einem lokalen Laden lädt, sondern sie bei jedem Aufruf der Seite über das Internet lädt. Dies wird wahrscheinlich langsam sein. Ich würde diese Methode nur wählen, wenn Sie nicht genügend Speicherplatz auf Ihrem Computer haben. – verisimilidude

Verwandte Themen