[LINUX] J'ai essayé de lire les données d'un fichier en utilisant Node.js.

introduction

Cet article est enregistré par un étudiant étudiant JS au lieu d'un mémo. Ne vous attendez pas au contenu.

Ouvrez un environnement virtuel

Cette fois, ce sera fait sur Ubuntu, alors démarrez l'environnement virtuel avec iTerm2.

Où ça a commencé

  1. Boîte virtuelle
  2. vagabond Ubuntu est utilisé dans un environnement virtuel qui utilise deux logiciels. cd ~/vagrant/ubuntu vagrant up vagrant ssh

Accédez au répertoire dans lequel Ubuntu est installé. vagrant up est une commande pour démarrer Ubuntu installé sur un PC virtuel, et vagrant ssh se connecte à SSH avec l'ensemble de machines virtuelles Vagrant.

1. Ecrire un programme à lire à partir d'un fichier


'use strict';
const filesystem=require('fs');
const readline=require('readline');
const rs =fs.createReadStream('nom de fichier');
const rl=readline.createInterface({input:rs, output:{}});
const prefectureDataMap = new Map();
rl.on('line', lines =>{
  console.log(lines);
});

La première ligne est une description de l'utilisation de JS en mode strict.

Les deuxième et troisième lignes appellent le module dans Node.js avec require. require est un module npm (Node Package Manager) qui vous permet d'utiliser des extensions. Vous pouvez affecter un module à une variable et l'utiliser dans JS avec la description suivante.

Le module appelé cette fois est fs (système de fichiers) pour gérer les fichiers et readline pour lire les fichiers ligne par ligne.

La quatrième ligne utilise un flux pour lire le fichier et l'affecter à une variable appelée rs. En plus de cela, le module fs dispose également de fonctions telles que fs.readFileSync qui lisent les données de manière synchrone.

La 5ème ligne est définie comme suit à l'aide d'un module (readline) qui peut lire le flux ligne par ligne.

const rl = readline.createInterface({
//Définition du flux que vous souhaitez lire
  input: rs,
//Paramètres du flux que vous souhaitez exporter
  output: {}
});

La 6ème ligne utilise un objet Map pour gérer une combinaison de clés et de valeurs. Ici, l'objet Map est affecté à la variable et l'objet Map est nouvellement initialisé.

La 7ème ligne est un objet appelé rl, qui déclenche la fonction suivante lorsqu'un événement appelé line se produit. Cette fois, les lignes d'argument sont affichées sur la console.

Changer la fonction sur la ligne 2.6

La fonction passée à la méthode on sur la 6ème ligne a été modifiée comme suit.

rl.on('line', lines => {


  const cutline = lines.split(',');
  const year = parseInt(cutline[0]);
  const prefecture = cutline[1];
  const popu = parseInt(cutline[3]);
 if (year === 2010 || year === 2015) {
    let vofmap = prefectureDataMap.get(prefecture);
    if (!vofmap) {
      vofmap = {
        p10: 0,
        p15: 0,
        change: null
      };
    }
    if (year === 2010) {
      vofmap.p10 = popu;
    }
    if (year === 2015) {
      vofmao.p15 = popu;
    }
    prefectureDataMap.set(prefecture, value);
  }
});

La méthode split () sur la deuxième ligne divise String en un tableau de chaînes en le divisant par la chaîne de délimitation spécifiée. L'utilisation de la méthode est la suivante.

Chaîne.sprit(Délimiteur spécifié)


A partir de la 3ème ligne, une partie du tableau créé à partir de la chaîne de caractères est affectée à la variable. parseInt () analyse un argument de chaîne et renvoie une valeur entière de la base spécifiée (base de la notation mathématique). En termes simples, ce qui était une valeur de chaîne de caractères a été remplacé par un nombre (valeur entière) pour la rendre plus facile à gérer.

À partir de la 6ème ligne, le programme suivant s'exécute uniquement lorsque la variable a la valeur spécifiée à l'aide de l'instruction if.

La 7ème ligne récupère la valeur de clé tout en spécifiant la clé sur la carte. Voir ci-dessous pour savoir comment écrire

Nom de la carte.get(Nom de la clé);


Sur la 8ème ligne, si aucune valeur n'est spécifiée pour le nom de clé, la valeur correspondant au nom de clé est attribuée pour la première fois.

J'expliquerai cette partie après la 9ème ligne.

      vofmap.p10 = popu;
    }
    if (year === 2015) {
      vofmao.p15 = popu;
    }
prefectureDataMap.set(prefecture, value);
  }
});

Ici, il est affecté à chaque objet de la valeur correspondant au nom de clé créé précédemment dans l'objet Map. Ensuite, la clé et la valeur définies sont enregistrées dans la carte précédente. Voir ci-dessous pour savoir comment écrire


Nom de la carte.set(Nom de la clé,valeur)

3. Ecrire une fonction à déclencher avec close

Le contenu suivant est décrit à la fin.

rl.on('close', () => {


  for (let [key, vofmap] of prefectureDataMap) {
    vofmap.change = vofmap.popu15 / vofmap.popu10;
  }
  const rankingArray = Array.from(prefectureDataMap).sort((pair1, pair2) => {
    return pair2[1].change - pair1[1].change;
  });
  const rankingStrings = rankingArray.map(([key, value]) => {
    return (
      key +
      ': ' +
      value.popu10 +
      ':' +
      value.popu15 +
       ':'+
      value.change
    );
  });
  console.log(rankingStrings);
});

La première ligne est la même que précédemment et la fonction suivante est déclenchée lorsque l'événement appelé close se produit dans l'objet appelé rl.

Les 2e à 4e lignes utilisent la syntaxe for ~ of pour boucler le nom de la clé et la valeur correspondante pour la carte appelée prefectureDataMap. Après cela, un nouvel objet appelé changement est créé dans la carte et la valeur applicable est attribuée.

La 5ème ligne est convertie en tableau après avoir exécuté la fonction. Cette fois, le tri permet de modifier l'ordre en fonction de la taille de la valeur de la fonction de rappel. Voir ci-dessous pour la méthode de description.

Array.from(Objectif de conversion,une fonction{})


La 9ème ligne utilise la fonction de carte. Il est différent de celui qui utilise le nom de la clé, etc. La fonction map transforme chaque élément du tableau en le contenu auquel la fonction donnée est appliquée. Cette fois, tout est converti sous forme de chaîne de caractères.

nom de fichier JS du nœud

Si ce qui précède est exécuté et qu'aucune erreur ne se produit dans REPL, cela réussit. Je vous remercie pour votre travail acharné! !!

Qu'est-ce qu'un flux

Lorsqu'il s'agit de données très volumineuses, si toutes les données sont chargées dans la mémoire à la fois, la mémoire peut devenir serrée et les performances du programme peuvent se détériorer. Dans de tels cas, utilisez des flux. Un flux est un flux qui peut progressivement lire, écrire et transformer des données.

Recommended Posts

J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai essayé de collecter des données sur un site Web avec Scrapy
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
J'ai essayé de récupérer les données de conversation d'ASKfm
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'utiliser l'API de données YOUTUBE V3
J'ai essayé de dessiner une ligne en utilisant une tortue
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'utiliser Headless Chrome de Selenium
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai essayé d'utiliser Pythonect, un langage de programmation de flux de données.
Exécutez des fichiers Python à partir de HTML en utilisant Django
J'ai essayé DBM avec Pylearn 2 en utilisant des données artificielles
J'ai essayé d'utiliser la base de données (sqlite3) avec kivy
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
Python --Lire les données d'un fichier de données numériques et calculer la covariance
J'ai essayé d'héberger un exemple de modèle de Pytorch en utilisant TorchServe
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
J'ai essayé d'utiliser l'API de Sakenowa Data Project
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de dessiner une pseudo figure fractale en utilisant Python
J'ai essayé d'utiliser PySpark de Jupyter 4.x sur EMR
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser BigQuery ML
Créer un fichier de données factice