Es ist nicht erforderlich, einer Variablen readline () zuzuweisen, wenn diese Zeile nicht benötigt wird. Diese Lösung gefällt mir jedoch am besten.
Anna
Das Mischen von direkten Lesevorgängen mit der Verwendung der Datei als Iterator wird nicht empfohlen (obwohl in diesem speziellen Fall kein Schaden angerichtet wird).
Chepner
9
Wenn das Schneiden auf Iteratoren funktionieren könnte ...
from itertools import islice
with open(fname)as f:for line in islice(f,1,None):pass
Dadurch wird die gesamte Datei auf einmal in den Speicher eingelesen. Daher ist es nur praktisch, wenn Sie eine relativ kleine Datei lesen.
Hayden Schiff
1
Um die Aufgabe des Lesens mehrerer Kopfzeilen zu verallgemeinern und die Lesbarkeit zu verbessern, würde ich die Methodenextraktion verwenden. Angenommen, Sie möchten die ersten drei Zeilen tokenisieren, die coordinates.txtals Header-Informationen verwendet werden sollen.
Beispiel
coordinates.txt
---------------Name,Longitude,Latitude,Elevation,CommentsString,DecimalDeg.,DecimalDeg.,Meters,StringEuler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
Mit der Methodenextraktion können Sie dann angeben, was Sie mit den Header-Informationen tun möchten (in diesem Beispiel werden die Header-Zeilen einfach anhand des Kommas markiert und als Liste zurückgegeben, aber es gibt noch viel mehr zu tun).
def __readheader(filehandle, numberheaderlines=1):"""Reads the specified number of lines and returns the comma-delimited
strings on each line as a list"""for _ in range(numberheaderlines):yield map(str.strip, filehandle.readline().strip().split(','))with open('coordinates.txt','r')as rh:# Single header line#print next(__readheader(rh))# Multiple header linesfor headerline in __readheader(rh, numberheaderlines=2):print headerline # Or do other stuff with headerline tokens
Wenn coordinates.txteine andere Kopfzeile enthalten ist, ändern Sie einfach numberheaderlines. Das Beste ist, es ist klar, was zu __readheader(rh, numberheaderlines=2)tun ist, und wir vermeiden die Mehrdeutigkeit, herausfinden oder kommentieren zu müssen, warum der Autor der akzeptierten Antwort next()in seinem Code verwendet.
# Open a connection to the filewith open('world_dev_ind.csv')as file:# Skip the column names
file.readline()# Initialize an empty dictionary: counts_dict
counts_dict ={}# Process only the first 1000 rowsfor j in range(0,1000):# Split the current line into a list: line
line = file.readline().split(',')# Get the value for the first column: first_col
first_col = line[0]# If the column value is in the dict, increment its valueif first_col in counts_dict.keys():
counts_dict[first_col]+=1# Else, add to the dict and set value to 1else:
counts_dict[first_col]=1# Print the resulting dictionaryprint(counts_dict)
next(f)
verwendenf.readline()
und zu speichernheader_line = next(f)
.quelle
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
vonmore-itertools
wie in docs.python.org/3/library/itertools.html#itertools-recipes angegeben ? Ich habe davon auf stackoverflow.com/questions/11113803Wenn Sie die erste Zeile und dann eine Operation für die Datei ausführen möchten, ist dieser Code hilfreich.
quelle
Wenn das Schneiden auf Iteratoren funktionieren könnte ...
quelle
quelle
Um die Aufgabe des Lesens mehrerer Kopfzeilen zu verallgemeinern und die Lesbarkeit zu verbessern, würde ich die Methodenextraktion verwenden. Angenommen, Sie möchten die ersten drei Zeilen tokenisieren, die
coordinates.txt
als Header-Informationen verwendet werden sollen.Beispiel
Mit der Methodenextraktion können Sie dann angeben, was Sie mit den Header-Informationen tun möchten (in diesem Beispiel werden die Header-Zeilen einfach anhand des Kommas markiert und als Liste zurückgegeben, aber es gibt noch viel mehr zu tun).
Ausgabe
Wenn
coordinates.txt
eine andere Kopfzeile enthalten ist, ändern Sie einfachnumberheaderlines
. Das Beste ist, es ist klar, was zu__readheader(rh, numberheaderlines=2)
tun ist, und wir vermeiden die Mehrdeutigkeit, herausfinden oder kommentieren zu müssen, warum der Autor der akzeptierten Antwortnext()
in seinem Code verwendet.quelle
Wenn Sie mehrere CSV-Dateien ab Zeile 2 lesen möchten, funktioniert dies wie ein Zauber
(Dies ist Teil von Parfaits Antwort auf eine andere Frage.)
quelle
quelle