Cela fait presque un mois depuis la dernière mise à jour ... C'est un bon crâne rasé de trois jours.
Comme le titre du chapitre l'indique, cela se fait souvent à l'aide de commandes UNIX, donc Il peut être un peu gênant d'écrire en python.
Tout d'abord, téléchargez l'ensemble de données ...
Comptez le nombre de lignes. Utilisez la commande wc pour confirmation.
python
filename = 'hightemp.txt'
f = open(filename, 'r')
print sum([1 for l in f])
#>>> 24
Il semble y avoir différentes façons de procéder ... http://551sornwmc.blog109.fc2.com/blog-entry-387.html http://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
En termes d'utilisation de la mémoire et de vitesse d'exécution, il semble préférable d'utiliser ce fichier mappé en mémoire.
python
# using memory mapped file
import mmap
def mapcount(filename):
f = open(filename, "r+")
buf = mmap.mmap(f.fileno(), 0)
lines = 0
readline = buf.readline
while readline():
lines += 1
return lines
Cliquez ici pour confirmation avec les commandes UNIX.
python
wc -l hightemp.txt
#>>> 24
Remplacez chaque onglet par un espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.
python
#import re
filename = 'hightemp.txt'
f = open(filename, 'r')
lines = f.readlines()
for line in lines:
#line_replaced = re.sub(r'\t', r'\s', line)
line_replaced = line.expandtabs(1)
print line_replaced,
Il existe des expandtabs.
Cliquez ici pour confirmation avec les commandes UNIX.
python
cat hightemp.txt | tr '\t' ','
Cette ↑ semble être la plus douce.
python
sed -e s/'\t'/'\s'/g hightemp.txt
#Cela ne fonctionne pas sur Mac, donc encore
sed -e s/$'\t'/$'\s'/g hightemp.txt
#cette?
http://mattintosh.hatenablog.com/entry/2013/01/16/143323
BSD sed inclus dans Mac OS X etc. ne se développe pas \ t dans le script vers des onglets comme echo et printf.
Oh...
Enregistrez uniquement la première colonne de chaque ligne sous col1.txt et la deuxième colonne sous col2.txt. Utilisez la commande cut pour confirmation.
python
filename = 'hightemp.txt'
filename_col1 = 'col1.txt'
filename_col2 = 'col2.txt'
f = open(filename, 'r')
f_col1 = open(filename_col1, 'w')
f_col2 = open(filename_col2, 'w')
lines = f.readlines()
content_col1 = [line.split()[0] + '\n' for line in lines]
content_col2 = [line.split()[1] + '\n' for line in lines]
f_col1.writelines(content_col1)
f_col2.writelines(content_col2)
f_col1.close()
f_col2.close()
Une chose à noter est que la méthode writelines n'inclut pas de saut de ligne. L'avez-vous ajouté vous-même?
Cliquez ici pour confirmation avec les commandes UNIX. Wow, c'est si facile que j'ai la nausée.
python
cut -f1 hightemp.txt > col1.txt
cut -f2 hightemp.txt > col2.txt
Combinez les col1.txt et col2.txt créés en 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.
python
filename_col1 = 'col1.txt'
filename_col2 = 'col2.txt'
filename_col1_col2 = 'col1_col2.txt'
f_col1 = open(filename_col1, 'r')
f_col2 = open(filename_col2, 'r')
f_col1_col2 = open(filename_col1_col2, 'w')
lines_1 = f_col1.readlines()
lines_2 = f_col2.readlines()
content = [line1 + '\t' + line2 + '\n' for line1, line2 in zip(lines_1, lines_2)]
f_col1_col2.writelines(content)
f_col1_col2.close()
f_col1.close()
f_col2.close()
Cliquez ici pour confirmation avec les commandes UNIX. C'était trop facile et j'ai vomi.
python
paste col1.txt col2.txt > col1_col2.txt
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.
knock014.py
# -*- coding: utf-8 -*-
import sys
import argparse
parser = argparse.ArgumentParser(description='Head command. Accepts an integer and a file name.')
#Nombre de lignes
parser.add_argument(
'-l', '--line',
type = int,
dest = 'line',
default = 10,
help = 'Équivaut au nombre de lignes spécifié par la commande head'
)
#nom de fichier
parser.add_argument(
'-f', '--filename',
type = str, #Spécifiez le type de valeur à recevoir
dest = 'filename', #Enregistrer le nom de la variable de destination
required = True, #Article requis
help = 'Nom de fichier donné en entrée' # --Déclaration à afficher au moment de l'aide
)
args = parser.parse_args()
N = args.line
filename = args.filename
#Afficher les N premières lignes
f = open(filename)
for x in xrange(N):
print f.next().strip()
f.close()
Lorsque vous faites ce qui précède.
python
python knock014.py -l 3 -f hightemp.txt
# >>>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
python knock014.py -l 3 -f hightemp.txt
# >>>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
Cliquez ici pour confirmation avec les commandes UNIX.
python
head -3 hightemp.txt
head hightemp.txt
Recevez le nombre naturel N au moyen d'un argument de ligne de commande et n'affichez que les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.
knock015.py
# -*- coding: utf-8 -*-
import sys
import argparse
parser = argparse.ArgumentParser(description='Tail command. Accepts an integer and a file name.')
#Nombre de lignes
parser.add_argument(
'-l', '--line',
type = int,
dest = 'line',
default = 10,
help = 'Équivaut au nombre de lignes spécifié par la commande tail'
)
#nom de fichier
parser.add_argument(
'-f', '--filename',
type = str, #Spécifiez le type de valeur à recevoir
dest = 'filename', #Enregistrer le nom de la variable de destination
required = True, #Article requis
help = 'Nom de fichier donné en entrée' # --Déclaration à afficher au moment de l'aide
)
args = parser.parse_args()
N = args.line
filename = args.filename
#Afficher les N dernières lignes
f = open(filename)
lines = f.readlines()
M = len(lines)
for i, line in enumerate(lines):
if i+N >= M:
#print i
print line.strip()
f.close()
En gros, je viens de changer le dernier processus de 14. Cliquez ici pour confirmation avec les commandes UNIX.
python
tail -3 hightemp.txt
tail hightemp.txt