[LINUX] Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.

Einführung

Dieser Artikel wurde von einem Studenten aufgezeichnet, der JS anstelle eines Memos studiert. Erwarten Sie nicht den Inhalt.

Öffnen Sie eine virtuelle Umgebung

Dieses Mal wird es unter Ubuntu gemacht, also starte die virtuelle Umgebung mit iTerm2.

Wo es angefangen hat

  1. Virtuelle Box 2.Vagrant Ubuntu wird in einer virtuellen Umgebung verwendet, die zwei Software verwendet. cd ~/vagrant/ubuntu vagrant up vagrant ssh

Wechseln Sie in das Verzeichnis, in dem Ubuntu installiert ist. vagrant up ist ein Befehl zum Starten von Ubuntu, das auf einem virtuellen PC installiert ist, und vagrant ssh stellt mit dem Vagrant Virtual Machine Set eine Verbindung zu SSH her.

1. Schreiben Sie ein Programm zum Lesen aus einer Datei


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

Die erste Zeile enthält eine Beschreibung für die Verwendung von JS im strengen Modus.

Die zweite und dritte Zeile rufen das Modul in Node.js mit require auf. require ist ein npm-Modul (Node Package Manager), mit dem Sie Erweiterungen verwenden können. Sie können einer Variablen ein Modul zuweisen und es in JS mit der folgenden Beschreibung verwenden.

Das Modul, das diesmal aufgerufen wird, ist fs (Dateisystem) zum Behandeln von Dateien und readline zum zeilenweisen Lesen von Dateien.

In der vierten Zeile wird die Datei mithilfe eines Streams gelesen und einer Variablen namens rs zugewiesen. Darüber hinaus verfügt das fs-Modul über Funktionen wie fs.readFileSync, die Daten synchron lesen.

Die 5. Zeile wird wie folgt mit einem Modul (Readline) eingestellt, das den Stream Zeile für Zeile lesen kann.

const rl = readline.createInterface({
//Festlegen des Streams, den Sie lesen möchten
  input: rs,
//Einstellungen für den Stream, den Sie exportieren möchten
  output: {}
});

In der 6. Zeile wird ein Map-Objekt verwendet, um eine Kombination aus Schlüsseln und Werten zu verarbeiten. Hier wird das Map-Objekt der Variablen zugewiesen und das Map-Objekt neu initialisiert.

Die 7. Zeile ist ein Objekt namens rl, das die folgende Funktion auslöst, wenn ein Ereignis namens line auftritt. Dieses Mal werden die Argumentzeilen auf der Konsole angezeigt.

Ändern Sie die Funktion in Zeile 2.6

Die an die on-Methode in der 6. Zeile übergebene Funktion wurde wie folgt geändert.

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);
  }
});

Die split () -Methode in der zweiten Zeile teilt String in ein Array von Strings auf, indem sie durch den angegebenen Trennzeichenstring aufgeteilt wird. Die Verwendung der Methode ist wie folgt.

String.sprit(Angegebenes Trennzeichen)


Ab der 3. Zeile wird der Variablen ein Teil des aus der Zeichenfolge erstellten Arrays zugewiesen. parseInt () analysiert ein String-Argument und gibt einen ganzzahligen Wert des angegebenen Radix zurück (Basis der mathematischen Notation). Einfach ausgedrückt, was ein Zeichenfolgenwert war, wurde in eine Zahl (ganzzahliger Wert) geändert, um die Handhabung zu vereinfachen.

Ab der 6. Zeile wird das folgende Programm nur ausgeführt, wenn die Variable den mit der if-Anweisung angegebenen Wert hat.

In der 7. Zeile wird der Schlüsselwert abgerufen, während der Schlüssel auf der Karte angegeben wird. Siehe unten für das Schreiben

Kartenname.get(Schlüsselname);


Wenn in der 8. Zeile der für den Schlüsselnamen angegebene Wert nicht vorhanden ist, wird der dem Schlüsselnamen entsprechende Wert zum ersten Mal zugewiesen.

Ich werde diesen Teil nach der 9. Zeile erklären.

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

Hier wird jedem Objekt der Wert zugewiesen, der dem zuvor im Map-Objekt erstellten Schlüsselnamen entspricht. Danach wird der Schlüssel- und Wertesatz in der vorherigen Karte registriert. Siehe unten für das Schreiben


Kartenname.set(Schlüsselname,Wert)

3. Schreiben Sie eine Funktion, um mit close zu feuern

Der folgende Inhalt wird am Ende beschrieben.

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);
});

Die erste Zeile ist dieselbe wie zuvor, und die folgende Funktion wird ausgelöst, wenn das Ereignis close als in dem Objekt rl auftritt.

In der 2. bis 4. Zeile wird die Syntax for ~ of verwendet, um den Schlüsselnamen und den entsprechenden Wert für die Map mit dem Namen prefectureDataMap zu wiederholen. Danach wird in der Karte ein neues Objekt namens change erstellt und der entsprechende Wert zugewiesen.

Die 5. Zeile wird nach Ausführung der Funktion in ein Array konvertiert. Dieses Mal wird sort verwendet, um die Reihenfolge entsprechend der Größe des Werts der Rückruffunktion zu ändern. Siehe unten für die Beschreibungsmethode.

Array.from(Conversion-Ziel,Funktion{})


Die 9. Zeile verwendet die Kartenfunktion. Es unterscheidet sich von dem, der den Schlüsselnamen usw. verwendet. Die Map-Funktion transformiert jedes Element des Arrays in den Inhalt, auf den die angegebene Funktion angewendet wird. Dieses Mal wird alles als Zeichenfolge konvertiert.

Knoten JS-Dateiname

Wenn das oben genannte ausgeführt wird und in REPL kein Fehler auftritt, ist es erfolgreich. Danke für deine harte Arbeit! !!

Was ist ein Stream?

Wenn bei sehr großen Daten alle Daten gleichzeitig in den Speicher geladen werden, kann der Speicher knapp werden und die Leistung des Programms kann sich verschlechtern. Verwenden Sie in solchen Fällen Streams. Ein Stream kann Daten nach und nach lesen, schreiben und konvertieren.

Recommended Posts

Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, mit Scrapy Daten von einer Website zu sammeln
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, Konversationsdaten von ASKfm zu kratzen
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, Headless Chrome von Selenium zu verwenden
Ich habe versucht, pipenv zu verwenden, machen Sie sich also eine Notiz
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich habe versucht, Pythonect, eine Programmiersprache für den Datenfluss, zu verwenden.
Führen Sie Python-Dateien mit Django aus HTML aus
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Python - Lesen Sie Daten aus einer numerischen Datendatei und berechnen Sie die Kovarianz
Ich habe versucht, ein Beispielmodell von Pytorch mit TorchServe zu hosten
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ich habe versucht, mit Python eine Pseudofraktalfigur zu zeichnen
Ich habe versucht, PySpark von Jupyter 4.x auf EMR zu verwenden
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe eine Funktion zum Abrufen von Daten aus der Datenbank spaltenweise mithilfe von SQL mit SQLite3 von Python [SQLite3, SQL, Pandas] erstellt.
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Erstellen Sie eine Dummy-Datendatei