Ответы:
with open(fname) as f:
next(f)
for line in f:
#do something
header_line = next(f).
f = open(fname,'r')
lines = f.readlines()[1:]
f.close()
['a', 'b', 'c'][1:]=>['b', 'c']
consume()from, more-itertoolsкак указано в docs.python.org/3/library/itertools.html#itertools-recipes ? Я слышал об этом на stackoverflow.com/questions/11113803
Если вам нужна первая строка, а затем вы хотите выполнить некоторую операцию с файлом, этот код будет полезен.
with open(filename , 'r') as f:
first_line = f.readline()
for line in f:
# Perform some operations
Если нарезка может работать на итераторах ...
from itertools import islice
with open(fname) as f:
for line in islice(f, 1, None):
pass
f = open(fname).readlines()
firstLine = f.pop(0) #removes the first line
for line in f:
...
Чтобы обобщить задачу чтения нескольких строк заголовка и улучшить читабельность, я бы использовал метод извлечения. Предположим, вы хотите разметить первые три строкиcoordinates.txt для использования в качестве информации заголовка.
пример
coordinates.txt
---------------
Name,Longitude,Latitude,Elevation, Comments
String, Decimal Deg., Decimal Deg., Meters, String
Euler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
Затем метод извлечения позволяет вам указать, что вы хотите сделать с информацией заголовка (в этом примере мы просто токенизируем строки заголовка на основе запятой и возвращаем их в виде списка, но есть место для гораздо большего).
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 lines
for headerline in __readheader(rh, numberheaderlines=2):
print headerline # Or do other stuff with headerline tokens
Вывод
['Name', 'Longitude', 'Latitude', 'Elevation', 'Comments']
['String', 'Decimal Deg.', 'Decimal Deg.', 'Meters', 'String']
Если coordinates.txtсодержит другой заголовок, просто измените numberheaderlines. Лучше всего то, что понятно, что __readheader(rh, numberheaderlines=2)происходит, и мы избегаем двусмысленности необходимости выяснять или комментировать, почему автор принятого ответа использует next()в своем коде.
Если вы хотите прочитать несколько файлов CSV, начиная со строки 2, это работает как шарм
for files in csv_file_list:
with open(files, 'r') as r:
next(r) #skip headers
rr = csv.reader(r)
for row in rr:
#do something
(это часть ответа Парфе на другой вопрос)
# Open a connection to the file
with 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 rows
for 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 value
if first_col in counts_dict.keys():
counts_dict[first_col] += 1
# Else, add to the dict and set value to 1
else:
counts_dict[first_col] = 1
# Print the resulting dictionary
print(counts_dict)
next(f)использованияf.readline()и сохранения его как переменной