Это приведет к одновременному считыванию всего файла в память, поэтому практично, если вы читаете довольно маленький файл.
Хайден Шифф
1
Чтобы обобщить задачу чтения нескольких строк заголовка и улучшить читабельность, я бы использовал метод извлечения. Предположим, вы хотите разметить первые три строкиcoordinates.txt для использования в качестве информации заголовка.
пример
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
Затем метод извлечения позволяет вам указать, что вы хотите сделать с информацией заголовка (в этом примере мы просто токенизируем строки заголовка на основе запятой и возвращаем их в виде списка, но есть место для гораздо большего).
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
Если coordinates.txtсодержит другой заголовок, просто измените numberheaderlines. Лучше всего то, что понятно, что __readheader(rh, numberheaderlines=2)происходит, и мы избегаем двусмысленности необходимости выяснять или комментировать, почему автор принятого ответа использует next()в своем коде.
# 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)
использованияf.readline()
и сохранения его как переменнойheader_line = next(f)
.источник
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
from,more-itertools
как указано в docs.python.org/3/library/itertools.html#itertools-recipes ? Я слышал об этом на stackoverflow.com/questions/11113803Если вам нужна первая строка, а затем вы хотите выполнить некоторую операцию с файлом, этот код будет полезен.
источник
Если нарезка может работать на итераторах ...
источник
источник
Чтобы обобщить задачу чтения нескольких строк заголовка и улучшить читабельность, я бы использовал метод извлечения. Предположим, вы хотите разметить первые три строки
coordinates.txt
для использования в качестве информации заголовка.пример
Затем метод извлечения позволяет вам указать, что вы хотите сделать с информацией заголовка (в этом примере мы просто токенизируем строки заголовка на основе запятой и возвращаем их в виде списка, но есть место для гораздо большего).
Вывод
Если
coordinates.txt
содержит другой заголовок, просто изменитеnumberheaderlines
. Лучше всего то, что понятно, что__readheader(rh, numberheaderlines=2)
происходит, и мы избегаем двусмысленности необходимости выяснять или комментировать, почему автор принятого ответа используетnext()
в своем коде.источник
Если вы хотите прочитать несколько файлов CSV, начиная со строки 2, это работает как шарм
(это часть ответа Парфе на другой вопрос)
источник
источник