Automatisez les tâches en manipulant des fichiers en Python

Lors de la simulation d'un ordinateur en changeant peu à peu les paramètres, j'avais l'habitude de manipuler manuellement un fichier à chaque fois, mais à mesure que le nombre de données requises augmente (environ 200), cela devient difficile. J'ai donc écrit un script simple pour l'automatiser dans une certaine mesure.

Aperçu

Je le faisais manuellement -Créer un répertoire pour chaque valeur de paramètre -Créer un fichier d'entrée et un fichier de commande de travail dans le répertoire -Editer les paramètres du fichier d'entrée avec un éditeur ・ Soumission d'emploi Je vais utiliser la commande avec python pour qu'elle puisse être exécutée.

Cette fois, le progiciel de calcul des premiers principes est utilisé pour calculer l'énergie d'interaction obtenue à partir de la distance interatomique du graphite.

Bibliothèques requises

import os
import re
from time import sleep

```Osest utilisé pour les opérations de commande de terminal, reest utilisé pour les expressions régulières et sleep`` est utilisé pour espacer les soumissions de travaux.

Réglage de la plage de paramètres

Créez 200 éléments de données avec des distances interatomiques allant de 3,01 Å '' à 5,00 Å ''.

begin = 3.01
end = 5.00
step = 0.01

Lecture des fichiers d'entrée et des fichiers de travail

Créez au préalable le fichier d'entrée et le fichier source du fichier de travail dans le répertoire `` data '' et lisez ces fichiers.

#Attribuer le chemin à la variable
input_path = 'data/input_seed'
job_path = 'data/qsub_seed'

#Ouvrez le fichier et lisez-le sous forme de texte
with open(input_path) as f:
  input_file = f.read()
  
with open(job_path) as f:
  job_file = f.read()

Courir

Comme le paramètre n'est pas un entier et que la fonction range '' ne peut pas être utilisée, une nouvelle fonction drange '' est définie.

#définition de fonction drange
def drange(begin, end, step):
    n = begin
    while n < end:
     yield n
     n += step
     
for r in drange(begin,end,step):
  #Å=>Convertir en bohr
  ang = ('{:.8f}'.format(r*2/0.529177))

  #Créer un répertoire, spécifier le chemin du fichier
  os.system('mkdir %s' % r)
  input_name = ('%s/nfinp' % r)
  job_name = ('%s/run.sh' % r)
  
  #Remplacer la distance par une expression régulière
  distance = str(ang)
  input_mod = re.sub('distance',distance,input_file)
   
  #Créer un fichier dans le répertoire
  with open(input_name, mode='w') as f:
    f.write(input_mod)
  
  with open(job_name, mode='w') as f:
    f.write(job_file)

  #Entrez dans le répertoire et soumettez un travail
  current_dir = os.getcwd()
  os.chdir(current_dir + ('/%s' % r))
  os.system('qsub run.sh')
  os.chdir(current_dir)
  sleep(1)

Contenu du fichier d'entrée

Le contenu du fichier d'entrée d'origine ressemble à ceci. La distance interatomique (`` distance '') est utilisée comme variable, et ** remplacée par une expression régulière **. Honnêtement, je ne comprends pas les autres parties lol

data/input_seed


0 0 0 0 0 0                    : graphite
6.00 20.00 1 4 4               : GMAX, GMAXP, NTYP, NATM, NATM2
1 0                            : num_space_group, type of bravis lattice
4.655149797 4.655149797 distance 90.0 90.0 60.0 : a,b,c,alpha,beta,gamma
24 24 2 1 1 1                  : knx,kny,knz, k-point shift
0 0                            : NCORD, NINV
 0.000000000000  0.000000000000  0.250000000000 1 1 1
 0.333333333333  0.333333333333  0.250000000000 1 1 1
 0.000000000000  0.000000000000 -0.250000000000 1 1 1
-0.333333333333 -0.333333333333 -0.250000000000 1 1 1
6 0.1500 1.00794 3 1 0.d0      : TYPE 1IATOMN,ALFA,AMION,ILOC,IVAN
0 0 0 0 0                      : ICOND 0-MD, 1-CONT.MD, 2-WAVE FN,, 3-WAVE FN CONT., iconstpw
0 1                            : IPRE, IPRI
200 1000 0 57200.00 0         : NMD1, NMD2, iter_last, CPUMAX,ifstop
6 1                            : Simple=1,Broyd2=3,Blugel=6, 1:charge, 2:potential mix.
0 30 0.5                       : starting mixing, kbxmix,alpha
0.60 0.50 0.60 0.70 1.00       : DTIM1, DTIM2, DTIM3, DTIM4, dtim_last
100.00 2 1 0.10D-08 1.d-06     : DTIO ,IMDALG, IEXPL, EDELTA
-0.0010 1.00D+03 0             : WIDTH,FORCCR,ISTRESS
rev-vdw-df2 1                       : XCTYPE, nspin
1.00 3                         : destm, n_stm
101                            : NBZTYP 0-SF, 1-BK, 2-SC, 3-BCC, 4-FCC, 5-DIA, 6-HEX
0 0 0                          : NKX, NKY, NKZ
0 0 0                          : NKX2,NKY2,NKZ2
12                             : NEG
1                              : NEXTST(MB)
0                              : 0; random numbers, 1; matrix diagon
2 0 0 0(MB)                    : imsd, i_2lm, i_sd2another, wksz for phase
0                              : evaluation of eko difference.0 = no ,1 = yes
0                              : npdosao
0 0.0                          : SM_N, dopping

Ce que je veux faire ensuite

Ce serait bien si nous pouvions générer les parties nécessaires du fichier de sortie sous forme de base de données et même dessiner un graphique.

Recommended Posts

Automatisez les tâches en manipulant des fichiers en Python
Exécuter des tâches automatisées en Python
Trier par date en python
Translocation de fichiers CSV avec Python Partie 1
Manipulation des fichiers EAGLE .brd avec Python
Téléchargez des fichiers Google Drive en Python
Trier les gros fichiers texte en Python
Lire des fichiers en parallèle avec Python
Exporter et exporter des fichiers en Python
Tri des fichiers par convention de dénomination à l'aide de Python
Extraire des chaînes de fichiers avec Python
Trouver des fichiers comme Linux Find en Python
Tapez les annotations pour Python2 dans les fichiers stub!
Référence du fichier INI en Python ou Ruby
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Lire et écrire des fichiers JSON avec Python
Exemple de gestion des fichiers eml en Python
Simulation commune par moto dans le test unitaire de Python
Exécuter régulièrement des tâches de type cron en Python
Téléchargez des fichiers dans n'importe quel format en utilisant Python
Algorithme d'alignement par méthode d'insertion en Python
Reconnaissance de scène par quantité de fonctionnalités GIST en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Convertir le fichier FBX en ASCII <-> BINARY en Python
Méta-analyse en Python
Unittest en Python
Résumé de la façon d'importer des fichiers dans Python 3
Résoudre l'erreur d'écriture japonaise UnicodeEncodeError dans le fichier Python
Époque en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
Lire et écrire des fichiers CSV et JSON avec Python
N-Gram en Python
Programmation avec Python
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
Plink en Python
Constante en Python
Encodage de caractères lors du traitement de fichiers en Python 3
Diviser les fichiers lors de l'écriture du plugin vim en python
Comment obtenir les fichiers dans le dossier [Python]
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
Obtenez le fichier, la fonction, le numéro de ligne en cours d'exécution en python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python