Dosyayı satır 2'den oku veya başlık satırını atla


242

Üstbilgi satırını atlayabilir ve satır2'den bir dosyayı okumaya nasıl başlayabilirim?

Yanıtlar:


453
with open(fname) as f:
    next(f)
    for line in f:
        #do something

51
Eğer yerine daha sonra başlık gerekirse next(f)kullanım f.readline()ve bir değişken olarak saklayın
lanetlenmiş

36
Veya kullanın header_line = next(f).
Samuel

94
f = open(fname,'r')
lines = f.readlines()[1:]
f.close()

Bu 1 satırı atlayacaktır. ['a', 'b', 'c'][1:]=>['b', 'c']
Eric Duminil

3
@LjubisaLivac haklı - bu cevap herhangi bir çizgiyi genelleştirir, bu yüzden bu çok daha güçlü bir çözümdür.
Daniel Soutar

17
Dosya okunamayacak kadar büyük olana kadar bu iyi. Bu küçük dosyalar için uygundur.
CppLearner

1
Dilim ayrıca içeriğin bir kopyasını oluşturur . Bu gereksiz yere verimsizdir.
chepner

Ne kullanmayla ilgili consume()gelen more-itertoolsbelirtilen docs.python.org/3/library/itertools.html#itertools-recipes ? Bunu stackoverflow.com/questions/11113803
AnotherParker

24

İlk satırı ve daha sonra dosya üzerinde bazı işlemler yapmak istiyorsanız bu kod yardımcı olacaktır.

with open(filename , 'r') as f:
    first_line = f.readline()
    for line in f:
            # Perform some operations

Bu satıra ihtiyaç duyulmuyorsa bir değişkene readline () atamak gerekli değildir. Ancak bu çözümü en çok seviyorum.
Anna

Dosyayı yineleyici olarak kullanarak doğrudan okumaları karıştırmanız önerilmez (bu özel durumda zarar verilmez).
chepner

9

Dilimleme yineleyiciler üzerinde çalışabiliyorsa ...

from itertools import islice
with open(fname) as f:
    for line in islice(f, 1, None):
        pass

1
Bu, sorunu çözmenin gerçekten güzel ve pythonic bir yoludur ve keyfi sayıda başlık satırına genişletilebilir
Dai

Bu gerçekten güzel bir infaz!
Dizel

Harika bir çözüm
Russ Hyde

Bu, şu anda olduğundan çok, çok daha fazla onaylanmalıdır.
chepner

8
f = open(fname).readlines()
firstLine = f.pop(0) #removes the first line
for line in f:
    ...

2
Bu, tüm dosyayı bir kerede belleğe okuyacağından, yalnızca oldukça küçük bir dosya okuyorsanız pratik olur.
Hayden Schiff

1

Birden çok başlık satırı okuma görevini genelleştirmek ve okunabilirliği artırmak için yöntem çıkarmayı kullanırdım. coordinates.txtÜstbilgi bilgisi olarak kullanılacak ilk üç satırı belirtmek istediğinizi varsayalım .

Misal

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

Daha sonra yöntem çıkarma , başlık bilgileriyle ne yapmak istediğinizi belirtmenize olanak tanır (bu örnekte, başlık satırlarını virgül temelinde belirleyip bir liste olarak döndürüyoruz, ancak daha fazlasını yapmak için yer var).

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

Çıktı

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

Başka coordinates.txtbir başlık içeriyorsa, değiştirin numberheaderlines. En iyisi, ne yaptığı açıktır __readheader(rh, numberheaderlines=2)ve kabul edilen cevabın yazarının next()kodunda neden kullandığını anlamak veya yorum yapmak zorunda kalmamaktan kaçınırız .



0
# 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.