Seit dem letzten Update ist fast ein Monat vergangen ... Es war ein guter dreitägiger rasierter Kopf.
Wie der Titel des Kapitels andeutet, erfolgt dies häufig mit UNIX-Befehlen Es kann etwas mühsam sein, in Python zu schreiben.
Laden Sie zuerst den Datensatz herunter ...
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
python
filename = 'hightemp.txt'
f = open(filename, 'r')
print sum([1 for l in f])
#>>> 24
Es scheint verschiedene Möglichkeiten zu geben, dies zu tun ... http://551sornwmc.blog109.fc2.com/blog-entry-387.html http://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python
In Bezug auf Speichernutzung und Ausführungsgeschwindigkeit scheint es besser zu sein, diese speicherabgebildete Datei zu verwenden.
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
Klicken Sie hier zur Bestätigung mit UNIX-Befehlen.
python
wc -l hightemp.txt
#>>> 24
Ersetzen Sie jede Registerkarte durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
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,
Es gibt expandtabs.
Klicken Sie hier zur Bestätigung mit UNIX-Befehlen.
python
cat hightemp.txt | tr '\t' ','
Dieses ↑ scheint das glatteste zu sein.
python
sed -e s/'\t'/'\s'/g hightemp.txt
#Auf dem Mac funktioniert es also nicht
sed -e s/$'\t'/$'\s'/g hightemp.txt
#Das?
http://mattintosh.hatenablog.com/entry/2013/01/16/143323
In Mac OS X usw. enthaltenes BSD sed wird im Skript nicht auf Registerkarten wie echo und printf erweitert.
Oh...
Speichern Sie die extrahierte Spalte jeder Zeile als col1.txt und die extrahierte Spalte 2 als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
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()
Zu beachten ist, dass die Writelines-Methode keine Zeilenumbrüche enthält. Hast du es selbst hinzugefügt?
Klicken Sie hier zur Bestätigung mit UNIX-Befehlen. Wow, es ist so einfach, dass mir übel wird.
python
cut -f1 hightemp.txt > col1.txt
cut -f2 hightemp.txt > col2.txt
Kombinieren Sie die in 12 erstellten Spalten col1.txt und col2.txt, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
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()
Klicken Sie hier zur Bestätigung mit UNIX-Befehlen. Es war zu einfach und ich musste mich übergeben.
python
paste col1.txt col2.txt > col1_col2.txt
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
knock014.py
# -*- coding: utf-8 -*-
import sys
import argparse
parser = argparse.ArgumentParser(description='Head command. Accepts an integer and a file name.')
#Anzahl der Zeilen
parser.add_argument(
'-l', '--line',
type = int,
dest = 'line',
default = 10,
help = 'Entspricht der Anzahl der vom Befehl head angegebenen Zeilen'
)
#Dateiname
parser.add_argument(
'-f', '--filename',
type = str, #Geben Sie den Typ des zu empfangenden Werts an
dest = 'filename', #Speichern Sie den Namen der Zielvariablen
required = True, #Erforderlicher Artikel
help = 'Dateiname als Eingabe angegeben' # --Erklärung, die zum Zeitpunkt der Hilfe angezeigt werden soll
)
args = parser.parse_args()
N = args.line
filename = args.filename
#Zeigen Sie die ersten N Zeilen an
f = open(filename)
for x in xrange(N):
print f.next().strip()
f.close()
Wenn Sie das oben genannte tun.
python
python knock014.py -l 3 -f hightemp.txt
# >>>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
python knock014.py -l 3 -f hightemp.txt
# >>>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
# >>>Yamagata 40 Yamagata.8 1933-07-25
# >>>Präfektur Yamanashi Kofu 40.7 2013-08-10
# >>>Präfektur Wakayama Katsuragi 40.6 1994-08-08
# >>>Präfektur Shizuoka Tenryu 40.6 1994-08-04
# >>>40 Katsunuma, Präfektur Yamanashi.5 2013-08-10
# >>>40 Koshiya, Präfektur Saitama.4 2007-08-16
# >>>Präfektur Gunma Tatebayashi 40.3 2007-08-16
Klicken Sie hier zur Bestätigung mit UNIX-Befehlen.
python
head -3 hightemp.txt
head hightemp.txt
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.
knock015.py
# -*- coding: utf-8 -*-
import sys
import argparse
parser = argparse.ArgumentParser(description='Tail command. Accepts an integer and a file name.')
#Anzahl der Zeilen
parser.add_argument(
'-l', '--line',
type = int,
dest = 'line',
default = 10,
help = 'Entspricht der Anzahl der vom Befehl tail angegebenen Zeilen'
)
#Dateiname
parser.add_argument(
'-f', '--filename',
type = str, #Geben Sie den Typ des zu empfangenden Werts an
dest = 'filename', #Speichern Sie den Namen der Zielvariablen
required = True, #Erforderlicher Artikel
help = 'Dateiname als Eingabe angegeben' # --Erklärung, die zum Zeitpunkt der Hilfe angezeigt werden soll
)
args = parser.parse_args()
N = args.line
filename = args.filename
#Letzte N Zeilen anzeigen
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()
Grundsätzlich habe ich gerade den letzten Prozess von 14 geändert. Klicken Sie hier zur Bestätigung mit UNIX-Befehlen.
python
tail -3 hightemp.txt
tail hightemp.txt
Recommended Posts