Lire le fichier à partir de la ligne 2 ou ignorer la ligne d'en-tête

Comment puis-je ignorer la ligne d'en-tête et commencer à lire un fichier à partir de line2?

172
demandé sur SilentGhost 2011-01-25 20:25:08

8 réponses

with open(fname) as f:
    next(f)
    for line in f:
        #do something
328
répondu SilentGhost 2011-01-25 17:26:45
f = open(fname,'r')
lines = f.readlines()[1:]
f.close()
71
répondu chriscauley 2011-01-25 17:29:40

Si vous voulez la première ligne et que vous voulez effectuer une opération sur le fichier, ce code sera utile.

with open(filename , 'r') as f:
    first_line = f.readline()
    for line in f:
            # Perform some operations
18
répondu saimadhu.polamuri 2015-03-07 16:18:03
f = open(fname).readlines()
firstLine = f.pop(0) #removes the first line
for line in f:
    ...
8
répondu Dror Hilman 2011-01-25 17:36:27

Si le découpage peut fonctionner sur les itérateurs...

from itertools import islice
with open(fname) as f:
    for line in islice(f, 1, None):
        pass
3
répondu Vajk Hermecz 2013-05-15 13:06:44
 with open('old.csv', 'r') as f, open('new.csv', 'w') as ff:
    first_line = f.readline()
    for line in f:
        line = line.translate({ord(i):None for i in 'abcd'})
        ff.write(line)
    ff.seek(0)
    ff.write(first_line)
1
répondu ly.nx 2015-09-17 14:40:31
# 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)
0
répondu Mauro Rementeria 2018-06-15 06:09:26

Pour généraliser la tâche de lecture de plusieurs lignes d'en-tête et pour améliorer la lisibilité, j'utiliserais l'extraction de méthode. Supposons que vous vouliez tokeniser les trois premières lignes de coordinates.txt à utiliser comme informations d'en-tête.

Exemple

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

Ensuite, l'extraction de méthode vous permet de spécifier ce que vous voulez faire avec les informations d'en-tête (dans cet exemple, nous jetons simplement les lignes d'en-tête en fonction de la virgule et les renvoyons sous forme de liste mais il y a de la place pour faire beaucoup plus).

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

Sortie

['Name', 'Longitude', 'Latitude', 'Elevation', 'Comments']
['String', 'Decimal Deg.', 'Decimal Deg.', 'Meters', 'String']

Si coordinates.txt contient une autre ligne d'en-tête, changez simplement numberheaderlines. Le meilleur de tous, il est clair ce que __readheader(rh, numberheaderlines=2) fait et nous évitons l'ambiguïté de devoir comprendre ou commenter pourquoi l'auteur de la réponse acceptée utilise next() dans son code.

0
répondu Minh Tran 2018-06-26 16:11:12