[Python] Fordere 100 Schläge heraus! (015 ~ 019)

Über die bisherige Geschichte

Siehe Erster Beitrag

Klopfstatus

9/24 hinzugefügt

Kapitel 2: Grundlagen des UNIX-Befehls

hightemp.txt ist eine Datei, in der die Aufzeichnung der höchsten Temperatur in Japan im tabulatorgetrennten Format "Präfektur", "Punkt", "℃" und "Tag" gespeichert wird. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie hightemp.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.

015. Die letzten N Zeilen ausgeben

Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.

tail_015.py


#-*- coding:utf-8 -*-

import codecs
import subprocess

def tail(data,N):
    max = len(data)
    print(''.join(data[max-N:]))

if __name__=="__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    N=3
    tail(f.readlines(),N)

#Bestätigen Sie mit dem Befehl tail
    output=subprocess.check_output(["tail","-n",str(N),basepath+filename])
    print(output.decode('utf-8'))

result


Otsuki, Yamanashi 39.9	1990-07-19
39 Tsuruoka, Präfektur Yamagata.9	1978-08-03
Präfektur Aichi Nagoya 39.9	1942-08-02

Otsuki, Yamanashi 39.9	1990-07-19
39 Tsuruoka, Präfektur Yamagata.9	1978-08-03
Präfektur Aichi Nagoya 39.9	1942-08-02

Impression: Der Punkt des Einfallsreichtums ist, wie die Linie angegeben wird, mit der der Join gestartet werden soll

016. Teilen Sie die Datei in N.

Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Führen Sie den gleichen Vorgang mit dem Befehl split durch

split_016.py


-*- coding:utf-8 -*-

import codecs
import subprocess
import math

def split(data,N):
    index=0
#Berechnen Sie die Anzahl der zu exportierenden Dateien
    page=math.ceil(len(data)/N)
    for i in range(0,page):
#Schreiben Sie die Daten, um die Liste als Zeichenfolge zu schreiben_Zu Daten hinzugefügt
        write_data=''.join(data[index:N+index])
        index+=N
        f=codecs.open('write_data'+str(index),'w','utf-8')
        f.write(write_data)

if __name__ == "__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    N = 15
    f=codecs.open(filename,'r','utf-8')
    split(f.readlines(),N)
    output=subprocess.check_output(["split","-l",str(N),basepath+filename])

result


Schreiben durch Split-Funktion_data15 und schreibe_Die Datei von data30 wurde ausgegeben
write_data15
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9	2007-08-16
40 Tajimi, Präfektur Gifu.9	2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
write_data30
40 Sakata, Präfektur Yamagata.1	1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
(Ausgelassen, weil das Ergebnis lang ist)

Die Dateien xaa und xab wurden mit dem Befehl split ausgegeben
xaa
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9	2007-08-16
40 Tajimi, Präfektur Gifu.9	2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
xab
40 Sakata, Präfektur Yamagata.1	1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
(Ausgelassen, weil das Ergebnis lang ist)

Process finished with exit code 0

Impressionen: Beim Erstellen der Teilungsfunktion habe ich mir Gedanken darüber gemacht, wie die Anzahl der Seiten berechnet und die Datei benannt werden kann, wenn eine Datei mit N wenigen Zeilen erstellt wird. .. ..

017. Unterschied in der Zeichenfolge in der ersten Spalte

Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle sort und uniq.

sort_uniq_017.py


# -*- coding:utf-8 -*-

import codecs
import subprocess

def sort_uniq(data):
    cut_temp = []
    sort_temp = []
    uniq_temp = []

#cut -Wie f 1 funktioniert
    for temp in data:
        cut_temp.append(temp.split()[:1])

#Wie sortieren funktioniert
    sort_temp = sorted(cut_temp)

#Wie uniq funktioniert
    for temp in sort_temp:
        if temp not in uniq_temp:
            uniq_temp.append(temp)

#Löschen Sie nach dem Konvertieren der Liste in str zusätzliche Zeichen und zeigen Sie sie an
    sort_uniq_data = map(str,uniq_temp)
    for temp in sort_uniq_data:
        print(''.join(temp).lstrip("['").rstrip("']"))

if __name__ == "__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    sort_uniq(f.readlines())
    print('\n')

    cut=subprocess.Popen(["cut","-f","1",basepath+filename],stdout=subprocess.PIPE)
    sort = subprocess.Popen(["sort"],stdin=cut.stdout,stdout=subprocess.PIPE)
    uniq = subprocess.Popen(["uniq"],stdin=sort.stdout,stdout=subprocess.PIPE)
    end_of_pipe = uniq.stdout
    for line in end_of_pipe:
        print(line.decode('utf-8').rstrip('\n'))

result


Präfektur Chiba
Präfektur Wakayama
Saitama
Präfektur Osaka
(Ausgelassen, weil das Ergebnis lang ist)


Präfektur Chiba
Präfektur Wakayama
Saitama
Präfektur Osaka
Präfektur Yamagata
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0

Impressionen: Ich wusste nicht, wie man eine Pipe mit dem Subprozessmodul schreibt. .. .. Unter Linux benötigen Sie nur |, aber wenn Sie es programmieren, können Sie sehen, welche Parameter Sie benötigen.

018. Sortieren

Sortieren Sie jede Zeile in absteigender Reihenfolge der Zahlen in der dritten Spalte. Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Sortieren Sie den Inhalt jeder Zeile unverändert). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).

r_sort_018.py


#-*- conding:utf-8 -*-
import codecs
import subprocess
import operator

def r_sort(data):
    cut_temp = []
    sort_temp = []

#Aufführen
    for temp in data:
        cut_temp.append(temp.split())

#Wie sortieren funktioniert
    sort_temp = sorted(cut_temp,key=operator.itemgetter(2),reverse=True)

#Löschen Sie nach dem Konvertieren der Liste in str zusätzliche Zeichen und zeigen Sie sie an
    sort_data = map(str, sort_temp)
    for temp in sort_data:
        print(''.join(temp).lstrip("['").rstrip("']"))

if __name__=="__main__":
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'hightemp.txt'
    with codecs.open(filename,'r','utf-8') as f:
        r_sort(f.readlines())
    print('\n')

    sort= subprocess.check_output(["sort","-r","-k","3",basepath+filename])
    print(sort.decode('utf-8'))

result


Präfektur Kochi', 'Egawazaki', '41', '2013-08-12
Saitama', 'Kumagai', '40.9', '2007-08-16
Präfektur Gifu', 'Tajimi', '40.9', '2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)

Präfektur Kochi Egawasaki 41 2013-08-12
40 Tajimi, Präfektur Gifu.9	2007-08-16
40 Kumagai, Präfektur Saitama.9	2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0

Impressionen: Die Itemgetter-Funktion des Operator-Moduls war hilfreich.

019. Ermitteln Sie die Häufigkeit des Auftretens der Zeichenfolgen in der ersten Spalte jeder Zeile und ordnen Sie sie in absteigender Reihenfolge der Häufigkeit des Auftretens an.

Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq, sort

frequency_019.py


#-*- coding:utf-8 -*-
import codecs
import subprocess
import collections
import operator

def frequency(data):
    cut_temp = []
    sort_temp = []
    count_dict={}

    # cut -Wie f 1 funktioniert
    for temp in data:
        cut_temp.append(temp.split()[:1])

    #Wie sortieren funktioniert
    sort_temp = sorted(cut_temp)

    #Zählen Sie die Anzahl der Elemente in der Liste
    # uniq -c+Wie sortieren funktioniert
    count_dict = collections.Counter(map(str,sort_temp))
    for value,count in sorted(count_dict.items(),key=operator.itemgetter(1),reverse=True):
        print(count,str(value).lstrip("['").rstrip("']"))

if __name__=="__main__":
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'hightemp.txt'
    with codecs.open(filename,'r','utf-8') as f:
        frequency(f.readlines())

    print('\n')
    cut=subprocess.Popen(["cut","-f","1",basepath+filename],stdout=subprocess.PIPE)
    sort1 = subprocess.Popen(["sort"],stdin=cut.stdout,stdout=subprocess.PIPE)
    uniq = subprocess.Popen(["uniq","-c"],stdin=sort1.stdout,stdout=subprocess.PIPE)
    sort2 = subprocess.Popen(["sort","-r"],stdin=uniq.stdout,stdout=subprocess.PIPE)
    end_of_pipe = sort2.stdout
    for line in end_of_pipe:
        print(line.decode('utf-8').lstrip(' ').rstrip('\n'))

result


3 Präfektur Yamanashi
3 Präfektur Yamagata
3 Präfektur Gunma
3 Präfektur Saitama
2 Präfektur Gifu
2 Chiba
(Ausgelassen, weil das Ergebnis lang ist)

3 Präfektur Gunma
3 Präfektur Yamanashi
3 Präfektur Yamagata
3 Präfektur Saitama
2 Präfektur Shizuoka
2 Präfektur Aichi
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0

Impressionen: Es war schwierig, Wörterbücher zu handhaben und zu sortieren.

Recommended Posts

[Python] Fordere 100 Schläge heraus! (015 ~ 019)
[Python] Fordere 100 Schläge heraus! (030-034)
[Python] Fordere 100 Schläge heraus! (006-009)
[Python] Fordere 100 Schläge heraus! (000-005)
[Python] Fordere 100 Schläge heraus! (010-014)
[Python] Fordere 100 Schläge heraus! (025-029)
[Python] Fordere 100 Schläge heraus! (020-024)
Python-Challenge-Tagebuch ①
Fordern Sie 100 Data Science-Schläge heraus
Python
Spartacamp Python 2019 Day2 Challenge
100 Pandas klopfen für Python-Anfänger
Fordern Sie Python3 und Selenium Webdriver heraus
Fordern Sie LOTO 6 mit Python ohne Disziplin heraus
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python studieren
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps
Python-Funktion ①
Python-Grundlagen
Python-Memo
Ufo-> Python (3)
Python-Einschlussnotation
Installieren Sie Python
Python Singleton
Python-Grundlagen ④
Python-Memorandum 2
Python-Memo
Python Jinja2
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Python-Inkrement
atCoder 173 Python
[Python] -Funktion
Python-Installation
Python installieren 3.4.3.
Versuchen Sie Python
Python-Memo
Python iterativ
Python-Algorithmus
Python2 + word2vec
[Python] -Variablen
Python-Funktionen
Python sys.intern ()
Python-Tutorial
Python-Fraktion
Python Underbar Das ist was
Python-Zusammenfassung
Starten Sie Python
[Python] Sortieren