[Python] Défiez 100 coups! (010-014)

À propos de l'histoire jusqu'à présent

Voir First Post

État de Knock

9/24 ajouté

Chapitre 2: Principes de base des commandes UNIX

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.

010. Compter le nombre de lignes

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

wc_010.py


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

import subprocess
import codecs

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

#\Comptez le nombre de n. Le tableau commence à 0, donc à la fin+1
    for index,data in enumerate(f):
        data.split('\n')

    print("Le nombre de lignes dans le fichier",index+1)

#Vérifiez la sortie avec la commande wc
    output = subprocess.check_output(["wc","-l",basepath+filename])
    print(output.decode('utf-8'))

result


24 lignes dans le fichier
      24 /Users/masassy/PycharmProjects/Pywork/training/hightemp.txt

Impressions: ouvrez le fichier et comptez le code de saut de ligne par index. Les codecs qui peuvent être lus en spécifiant le code de caractère sont pratiques.

011. 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.

tab2space_011.py


-*- coding:utf-8 -*-

import subprocess
import codecs

if __name__=="__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
#read lit tous les caractères, readline lit une ligne, readlines lit toutes les lignes
    r = f.read()
    space_data=''
    for tab_data in r:
        if(tab_data=='\t'):
            space_data += " "
            continue
        else:
            space_data += tab_data

    print(space_data)
#Vérifiez la sortie avec la commande sed
    output =subprocess.check_output(["sed","-e" ,"s/\t/ /g",basepath+filename])
    print(output.decode('utf-8'))

result


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
(Omis car le résultat est long)

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
(Omis car le résultat est long)

Process finished with exit code 0

Impressions: j'ai pu confirmer la différence entre read (), readline () et readlines (). Le sous-processus qui peut utiliser des commandes est vraiment pratique.

012. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt

Enregistrez la version extraite de la première colonne de chaque ligne uniquement sous col1.txt et la version extraite de la deuxième colonne uniquement sous col2.txt. Utilisez la commande cut pour confirmation.

cut_012.py


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

import codecs
import subprocess

if __name__ == "__main__":
    filename = 'hightemp.txt'
    writename1='col1.txt'
    writename2='col2.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    r = f.readlines()
    word_list1= []
    word_list2= []

#avec split\Ajouter à la liste séparément pour chaque t
    for temp1 in r:
        word_list1.append(temp1.split('\t')[0])
    f.close
    f = codecs.open(writename1,'w','utf-8')
    for word in word_list1:
        f.write(word+'\n')
    f.close

    for temp2 in r:
        word_list2.append(temp2.split('\t')[1])
    f.close
    f = codecs.open(writename2,'w','utf-8')
    for word in word_list2:
        f.write(word+'\n')
    f.close

#Vérifiez la sortie avec la commande cut
    output = subprocess.check_output(["cut","-f","1,2",basepath+filename])
    print(output.decode('utf-8'))

result


*La commande cut sort les première et deuxième colonnes en même temps
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
Tajimi, préfecture de Gifu
(Omis car le résultat est long)

Process finished with exit code 0

col1.txt
Préfecture de Kochi
Saitama
Préfecture de Gifu
(Omis car le résultat est long)

col2.txt
Egawazaki
Kumagai
Tajimi
(Omis car le résultat est long)

Impression: j'ai divisé le traitement en col1.txt et col2.txt, mais il semble y avoir un bon traitement ...

013. Fusionner col1.txt et col2.txt

Combinez col1.txt et col2.txt créés dans 12 et créez un fichier texte dans lequel les première et deuxième colonnes du fichier d'origine sont organisées par des délimiteurs de tabulation. Utilisez la commande coller pour confirmation.

merge_013.py


#-*- conding:utf-8 -*-

import codecs
import subprocess
basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
filename1 = 'col1.txt'
filename2 = 'col2.txt'
filename3 = 'col3.txt'

#Lire les fichiers avec des readlines et les lister
f1 = codecs.open(filename1,'r','utf-8')
r1 = f1.readlines()
f1.close()

f2 = codecs.open(filename2,'r','utf-8')
r2 = f2.readlines()
f2.close()

s_r1=''
s_r2=''

#Changer la liste en une chaîne, r1\n est\Changer en t(\t devient un garde)
for data in r1:
    s_r1 += str(data)
    s_r1=s_r1.replace('\n','\t')

#Changer la liste en chaîne(\n est laissé tel quel parce que c'est un gardien)
for data in r2:
    s_r2 += str(data)

address=''
i=0
#s_Évaluer r1 caractère par personnage et garde(\t)Ajouter des données à l'adresse jusqu'à
for temp in s_r1:
    if(temp!='\t'):
        address+=temp
    else:
#s à adresser_Les données de r2(\n)Ajouter jusqu'à
        address+='\t'
        while(s_r2[i]!='\n'):
            address+=s_r2[i]
            i+=1
        else:
            address+='\n'
            i+=1
            continue

f3=codecs.open(filename3,'w','utf-8')
f3.write(address)
f3.close()

output=subprocess.check_output(["paste",basepath+filename1,basepath+filename2])
print(output.decode('utf-8'))

result


Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
Tajimi, préfecture de Gifu
(Omis car le résultat est long)
Process finished with exit code 0

Impressions: ajoutez des données dans une double boucle.

014. Sortie de N lignes depuis le début

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

head_014.py


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

import codecs
import subprocess

def head(data,N):
    i=0
    j=0
    msg=''
    while(i<N):
        for temp in data[j]:
            if(temp!='\n'):
                msg += temp
                j+=1
            else:
                msg += '\n'
                i+=1
                j+=1
                break
    else:
        return msg

if __name__=="__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    r=f.read()
    N=4
    msg = head(r,N)
    print(msg)

#Confirmer avec la commande head
    output=subprocess.check_output(["head","-n",str(N),basepath+filename])
    print(output.decode('utf-8'))

result


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 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

Process finished with exit code 0

Impressions: il est devenu quelque chose comme le langage C. .. ..

Recommended Posts

[Python] Défiez 100 coups! (030-034)
[Python] Défiez 100 coups! (006-009)
[Python] Défiez 100 coups! (000-005)
[Python] Défiez 100 coups! (010-014)
[Python] Défiez 100 coups! (025-029)
[Python] Défiez 100 coups! (020-024)
journal des défis python ①
Défiez 100 coups de science des données
Python
Défi Spartacamp Python 2019 Day2
Pandas 100 coups pour les débutants en Python
Défiez Python3 et Selenium Webdriver
Défiez LOTO 6 avec Python sans discipline
Traitement d'image avec la binarisation Python 100 knocks # 3
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
100 traitement d'image par Python Knock # 2 Échelle de gris
Les bases de Python ⑤
Résumé Python
Python intégré
Notation d'inclusion Python
Technique Python
Étudier Python
Compte à rebours Python 2.7
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
mémo python
Python Jinja2
100 traitement d'image avec Python Knock # 8 Max Pooling
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Essayez Python
Mémo Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Fonctions Python
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
[Python] Trier
Remarque: Python
Les bases de Python ③
Sortie du journal python
Les bases de Python
[Scraping] Scraping Python
Mise à jour Python (2.6-> 2.7)