Formular Nr. 16

Lehrer, die an russischen Universitäten arbeiten, sind regelmäßig mit der Notwendigkeit konfrontiert, der Verwaltung eine Liste ihrer wissenschaftlichen und pädagogischen Arbeiten zur Verfügung zu stellen. Zum Beispiel für die (Wieder-) Wahl in eine Position, die Verleihung eines Titels usw. Das Format für die Präsentation von Informationen, Formular Nr. 16, wurde entwickelt, um zu wissen, wann und wird es in den bürokratischen Tiefen des Ministeriums für Wissenschaft und Hochschulbildung verwendet Bildung der Russischen Föderation. Ich wurde zu faul, um dieses lächerliche Formular manuell auszufüllen, und schrieb ein kleines Python-Skript, das die erforderliche Tabelle basierend auf Informationen aus der wissenschaftlichen elektronischen Bibliothek elibrary.ru generiert . Vielleicht wird sich jemand dafür interessieren, daher finden Sie unten eine Beschreibung dieses Verfahrens ...





, elibrary.ru, , «» « ». «», « ». , html-, index.html



. :





Tabellenzeile von elibrary.ru
elibrary.ru

№268 ( №3 . 52) - :





Tabellenreihe gemäß Formular Nr. 16
№16

Das Skript zum Konvertieren des Tabellenformats basiert auf der Verwendung der BeautifulSoup- Bibliothek , über die ich sehr flüchtig geworden bin und die ich zum ersten Mal in meinem Leben verwendet habe. Folgendes habe ich bekommen:





#!/usr/bin/env python3
from bs4 import BeautifulSoup
from random import randint
from re import findall 

YFrom, YTo = 2015, 2020                              #    

def NP(s): #        
  pages = s.split()[-1]
  if '-' in pages:
    P = pages.split('-')
    np =  1 + int(float(P[1])-float(P[0]))
  else:
    np = randint(5, 10)
  return '%d' % np #    
  
def Year(s, FROM, TO): #      
  Ys = findall(r'\s\d{4}\.', s)                 #    ' 2020.'
  if not Ys: Ys = findall(r'\s\d{4}', s)        #    ' 2020'
  if not Ys: return False        #     -                              
  for y in Ys: Y = int(float(y)) #        
  if Y<FROM or Y>TO: return False 
  else:              return True

with open('index.html', 'r') as fp: 
  soup = BeautifulSoup(fp, 'html.parser')              #   
soup.head.style.decompose()                            #  , css  ..
aname = soup.title.get_text().split('-')[1]            #  
aname = f'        -  {aname:s}\n'
soup.title.string = aname                              #  
soup.find('span').string = aname                       #  
soup.find('i').decompose()                             #  - 
soup.find('table').decompose()                         #     
table = soup.find('table')                             #   
table['border'] = 1                                    #  
table['width']  = '100%'                               #  
N = 1                                                  #   
rows = table.find_all('tr')                            #     
for i in range(len(rows)):                             #     
  cols = rows[i].find_all('td')                        #   
  if len(cols)==3 and cols[1].find('span'):            #     
    content = cols[1].get_text()                       #     
    title   = cols[1].find('span').get_text()          #  
    authors = cols[1].find('i').get_text()             #  
    cites   = int(cols[2].get_text())                  #   
    content = content.replace(title, '')               #  ,   :
    content = content.replace(authors, '')             #  content    
    thesis  = content.replace(' : ','')       #     
    abbook  = content.replace(' : ','')          # 
    if   thesis != content:                            #
      title += ' ()';      content = thesis      #
    elif abbook != content:                            #
      title += ' ()';      content = abbook      #
    else:                                              #
      if ''  in content: title+= ' ()'#
      elif '' in content: title+= ' ()'#
      else: title += ' ()'                       #
    authors = authors.split(', ')                      #   
    if cites<10 or not Year(content, YFrom, YTo):      #    
      rows[i].decompose()                              #
    else:                                              #   -  -  
      anumber = len(authors)
      if anumber<5: PS = ''
      else:         PS = f'  .,  {anumber:d} .'
      authors = ', '.join(authors[0:5]) + PS

      cols[0].string = f'{N:3d}'                        #  
      cols[1].string = title                            # 
      cols[2].string = "."                           #  
      for info in [content, NP(content), authors]:      #    
        A = soup.new_tag('td');  A.string = info ; rows[i].append(A)
      N+= 1
  else:
    rows[i].decompose()

tr = soup.new_tag('tr') #   
names = ['№ \', ' ,  ', ' ', ' ', '  ..  .', '']
for name in names:
  th = soup.new_tag('th') 
  th.string = name
  tr.append(th) 
table.insert(0, tr)
  
with open('table.html', 'w', encoding='utf-8') as fp: fp.write(str(soup))    
      
      



Um die Aufgabe abzuschließen, müssen Sie das Skript in dem Ordner ausführen, der die Datei enthält, index.html



in der wir die Tabelle mit elibrary.ru gespeichert haben. Bei der Ausgabe wird eine Datei generiert table.html



, die einfach in Google Docs hochgeladen werden kann. Dort kann sie endgültig bearbeitet werden, z. B. durch Ändern der Spaltenbreite, Auswählen von Schriftarten usw.








All Articles