100 points de traitement du langage naturel Chapitre 2 Bases des commandes UNIX (première moitié)

Un enregistrement de la résolution des problèmes dans la première moitié du chapitre 2. Le résultat de l'exécution de la commande UNIX est également affiché.

Le fichier cible est hightemp.txt, comme indiqué sur la page Web.

hightemp.txt est un fichier qui stocke l'enregistrement de la température la plus élevée au Japon dans le format délimité par des tabulations de «préfecture», «point», «℃» et «jour». Créez un programme qui effectue le traitement suivant et exécutez hightemp.txt en tant que fichier d'entrée. De plus, exécutez le même processus avec une commande UNIX et vérifiez le résultat de l'exécution du programme.

</ i> 10. Comptage du nombre de lignes

Comptez le nombre de lignes. Utilisez la commande wc pour confirmation.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

f = open('hightemp.txt')
lines = f.readlines()
print len(lines)
f.close()

#=> 24

Lisez le fichier cible ligne par ligne et comptez le nombre de lignes.

cat hightemp.txt | grep -c ""

#=> 24

Affichez le texte avec cat '' et dirigez-le vers grep '' pour compter le nombre de lignes. Au fait, vous pouvez compter le nombre de lignes de la même manière avec wc -l au lieu de grep -c "" après le tube, mais avec wc il y a un espace dans la sortie. Je vais joindre. Il est souvent préférable d'utiliser grep -c "" car cela peut être ennuyeux s'il y a des espaces dans le tube pour passer la sortie du nombre de lignes à un autre traitement.

</ i> 11. Remplacer les tabulations par des espaces

Remplacez chaque onglet par un espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import re

inputfile = 'hightemp.txt'
outputfile = 'hightemp_tab2space.txt'

f = open(inputfile)
lines = f.readlines()
g = open(outputfile, 'w')
for line in lines:
    line = re.sub('\t', ' ', line)
    g.write(line)
    print line
f.close()
g.close()

#=>Préfecture de Kochi Egawasaki 41 2013-08-12
#=>40 Kumagai, Préfecture de Saitama.9 2007-08-16
#=>40 Tajimi, Préfecture de Gifu.9 2007-08-16
#=>Yamagata 40 Yamagata.8 1933-07-25
#=>Préfecture de Yamanashi Kofu 40.7 2013-08-10
#=>Préfecture de Wakayama Katsuragi 40.6 1994-08-08
#=>Préfecture de Shizuoka Tenryu 40.6 1994-08-04
#=>40 Katsunuma, préfecture de Yamanashi.5 2013-08-10
#=>40 Koshiya, Préfecture de Saitama.4 2007-08-16
#=>Préfecture de Gunma Tatebayashi 40.3 2007-08-16
#=>Préfecture de Gunma Kamisatomi 40.3 1998-07-04
#=>Ainishi 40, Préfecture d'Aichi.3 1994-08-05
#=>Préfecture de Chiba Ushihisa 40.2 2004-07-20
#=>Préfecture de Shizuoka Sakuma 40.2 2001-07-24
#=>40 Uwajima, Préfecture d'Ehime.2 1927-07-22
#=>40 Sakata, Préfecture de Yamagata.1 1978-08-03
#=>Mino 40, préfecture de Gifu 2007-08-16
#=>Préfecture de Gunma Maebashi 40 2001-07-24
#=>39 Shigehara, Chiba.9 2013-08-11
#=>39 Hatoyama, Préfecture de Saitama.9 1997-07-05
#=>Toyonaka 39, Osaka.9 1994-08-08
#=>Otsuki, Yamanashi 39.9 1990-07-19
#=>39 Tsuruoka, Préfecture de Yamagata.9 1978-08-03
#=>Préfecture d'Aichi Nagoya 39.9 1942-08-02

Remplacez le caractère de tabulation \ t par un espace.

cat hightemp.txt | tr "\t" " " > hightemp_tr.txt

#=> (La sortie est la même que ci-dessus)

</ i> 12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt

Enregistrez la colonne extraite de chaque ligne sous col1.txt et la colonne extraite 2 sous col2.txt. Utilisez la commande cut pour confirmation.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

inputfile = 'hightemp.txt'
outputfile1 = 'col1.txt'
outputfile2 = 'col2.txt'
f = open(inputfile)
lines = f.readlines()
g = open(outputfile1, "w")
h = open(outputfile2, "w")
for line in lines:
    line = line.split('\t')
    g.write(line[0].strip('\n') + '\n')
    h.write(line[1].strip('\n') + '\n')
f.close()
g.close()
h.close()

# (col1.txt)
#=>Préfecture de Kochi
#=>Saitama
#=>Préfecture de Gifu
#=>Préfecture de Yamagata
#=>Préfecture de Yamanashi
#=>Préfecture de Wakayama
#=>Préfecture de Shizuoka
#=>Préfecture de Yamanashi
#=>Saitama
#=>Préfecture de Gunma
#=>Préfecture de Gunma
#=>Préfecture d'Aichi
#=>Préfecture de Chiba
#=>Préfecture de Shizuoka
#=>Préfecture d'Ehime
#=>Préfecture de Yamagata
#=>Préfecture de Gifu
#=>Préfecture de Gunma
#=>Préfecture de Chiba
#=>Saitama
#=>Préfecture d'Osaka
#=>Préfecture de Yamanashi
#=>Préfecture de Yamagata
#=>Préfecture d'Aichi

# (col2.txt)
#=>Egawazaki
#=>Kumagai
#=>Tajimi
#=>Yamagata
#=>Kofu
#=>Katsuragi
#=>Tenryu
#=>Katsunuma
#=>Koshiya
#=>Tatebayashi
#=>Kamisatomi
#=>Ainishi
#=>Ushihisa
#=>Sakuma
#=>Uwajima
#=>Sakata
#=>Mino
#=>Maebashi
#=>Mobara
#=>Hatoyama
#=>Toyonaka
#=>Otsuki
#=>Tsuruoka
#=>Nagoya

Fractionner par délimiteur de tabulation et sortie chaque cible dans un fichier

cut -f 1 hightemp.txt > hightemp_cut1.txt
cut -f 2 hightemp.txt > hightemp_cut2.txt

#=> (Comme ci-dessus, donc la sortie est omise)

</ i> 13. Fusionner col1.txt et col2.txt

Combinez les col1.txt et col2.txt créés dans 12 pour créer un fichier texte dans lequel les première et deuxième colonnes du fichier d'origine sont disposées en tabulation. Utilisez la commande coller pour confirmation.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

inputfile1 = 'col1.txt'
inputfile2 = 'col2.txt'
outputfile = 'col_merge.txt'

f = open(inputfile1)
g = open(inputfile2)
h = open(outputfile, "w")

lines1 = f.readlines()
lines2 = g.readlines()
for a, b in zip(lines1, lines2):
    h.write(a.strip() + '\t' + b.strip() + '\n')
f.close()
g.close()
h.close()

#=>Préfecture de Kochi Egawazaki
#=>Kumagai, Préfecture de Saitama
#=>Tajimi, préfecture de Gifu
#=>Préfecture de Yamagata Yamagata
#=>Préfecture de Yamanashi Kofu
#=>Préfecture de Wakayama Katsuragi
#=>Préfecture de Shizuoka Tenryu
#=>Katsunuma, préfecture de Yamanashi
#=>Koshiya, Préfecture de Saitama
#=>Préfecture de Gunma Tatebayashi
#=>Préfecture de Gunma Kamisatomi
#=>Préfecture d'Aichi Ainishi
#=>Ushihisa, Chiba
#=>Préfecture de Shizuoka Sakuma
#=>Uwajima, Préfecture d'Ehime
#=>Sakata, préfecture de Yamagata
#=>Mino, préfecture de Gifu
#=>Préfecture de Gunma Maebashi
#=>Shigehara, Chiba
#=>Hatoyama, Préfecture de Saitama
#=>Toyonaka, Osaka
#=>Préfecture de Yamanashi Otsuki
#=>Tsuruoka, préfecture de Yamagata
#=>Préfecture d'Aichi Nagoya

Lisez deux fichiers et traitez des objets de séquence en parallèle avec la fonction zip.

paste col1.txt col2.txt > hightemp_paste.txt

#=> (La sortie est la même que ci-dessus)

</ i> 14. Sortie de N lignes depuis le début

Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et afficher uniquement les N premières lignes de l'entrée. Utilisez la commande head pour confirmation.

# -*- coding: utf-8 -*-
__author__ = 'todoroki'

import sys

if len(sys.argv) == 3:
    N = int(sys.argv[1])
    f = open(sys.argv[2])
    lines = f.readlines()
    for i in xrange(N):
        print lines[i].strip()
    f.close()
else:
    print "please input \'N\' and \'FILENAME\'"

# (python problem14.py 5 hightemp.txt)
#=>Préfecture de Kochi Egawasaki 41 2013-08-12
#=>40 Kumagai, Préfecture de Saitama.9    2007-08-16
#=>Préfecture de Gifu Tajimi 40.9    2007-08-16
#=>Yamagata 40 Yamagata.8    1933-07-25
#=>Préfecture de Yamanashi Kofu 40.7    2013-08-10

Sortie du nombre de lignes lues pour le nombre de lignes reçues.

head -n 5 hightemp.txt

#=> (La sortie est la même que ci-dessus)

Recommended Posts