C'est un record de défi de 100 langues de traitement knock 2015. L'environnement est Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64 bits). Cliquez ici pour une liste des coups passés (http://qiita.com/segavvy/items/fb50ba8097d59475f760).
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.
Remplacez chaque caractère de tabulation par un caractère d'espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.
Le code fini:
main.py
# coding: utf-8
fname = 'hightemp.txt'
with open(fname) as data_file:
for line in data_file:
print(line.replace('\t', ' '), end='')
Résultat de l'exécution:
Terminal
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
La commande UNIX a été confirmée par le script shell.
test.sh
#!/bin/sh
#Commande sed s: s/Modèle de recherche/Chaîne de remplacement/g (tout remplacer)
sed 's/\t/ /g' hightemp.txt
tr
et ʻexpand`.test2.sh
#!/bin/sh
#commande tr
tr '\t' ' ' < hightemp.txt
test3.sh
#!/bin/sh
#commande expand
expand --tabs=1 hightemp.txt
Résultat de l'exécution:
Terminal
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
Le résultat était le même.
Étant donné que le fichier cible est cette fois petit, il peut être possible de le lire en entier et de le remplacer. Cependant, comme sed
est répertorié en haut de la commande utilisée pour la confirmation, j'ai pensé que j'aimerais que vous appreniez le traitement de flux comme intention de la question. Par conséquent, il est implémenté en le lisant petit à petit.
sed
La commande sed
est assez compliquée, et je ne pouvais pas du tout la comprendre avec man sed
, mais Explication Wikipedia: sed (ordinateur) J'ai eu un aperçu avec.
La commande sed
utilisée cette fois spécifie le modèle de recherche avec une expression régulière, mais le \ t
indiquant l'onglet se trouve être le même que l'expression régulière, donc je pourrais le remplacer sans connaître l'expression régulière. Les expressions régulières sont le thème du chapitre 3 de ce coup, nous allons donc y apprendre.
tr
tr
le remplacera si vous spécifiez deux caractères. Puisque les données cibles doivent être fournies à partir de l'entrée standard, elles sont redirigées avec <
. Veuillez vérifier man
pour plus de détails.convertit les tabulations en espaces. Par défaut, la largeur de l'onglet est définie sur 8 caractères et convertie en blanc, donc l'option
tabsest utilisée pour définir la largeur de l'onglet sur 1 caractère. Veuillez vérifier
man` pour plus de détails.C'est tout pour le 12e coup. Si vous avez des erreurs, j'apprécierais que vous les signaliez.
Recommended Posts