Tidak perlu untuk menetapkan readline () ke variabel jika seseorang tidak membutuhkan baris ini. Saya paling suka solusi ini.
Anna
Mencampur bacaan langsung dengan menggunakan file sebagai iterator tidak disarankan (meskipun dalam kasus khusus ini tidak ada kerusakan yang dilakukan).
chepner
9
Jika mengiris bisa bekerja pada iterator ...
from itertools import islice
with open(fname)as f:for line in islice(f,1,None):pass
Ini akan membaca seluruh file menjadi memori sekaligus, jadi itu hanya praktis jika Anda membaca file yang cukup kecil.
Hayden Schiff
1
Untuk menggeneralisasi tugas membaca beberapa baris header dan untuk meningkatkan keterbacaan, saya akan menggunakan metode ekstraksi. Misalkan Anda ingin tokenize tiga baris pertama coordinates.txtuntuk digunakan sebagai informasi header.
Contoh
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
Kemudian ekstraksi metode memungkinkan Anda menentukan apa yang ingin Anda lakukan dengan informasi tajuk (dalam contoh ini kami cukup memberi tokenize pada baris tajuk berdasarkan koma dan mengembalikannya sebagai daftar tetapi ada ruang untuk melakukan lebih banyak lagi).
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
Jika coordinates.txtberisi tajuk baris lain, cukup ubah numberheaderlines. Yang terbaik dari semuanya, jelas apa __readheader(rh, numberheaderlines=2)yang dilakukan dan kami menghindari kerancuan karena harus mencari tahu atau mengomentari mengapa penulis jawaban yang diterima menggunakan next()kode ini.
# 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)
menggunakanf.readline()
dan menyimpannya sebagai variabelheader_line = next(f)
.sumber
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
darimore-itertools
seperti yang dinyatakan dalam docs.python.org/3/library/itertools.html#itertools-recipes ? Saya mendengar tentang ini di stackoverflow.com/questions/11113803Jika Anda ingin baris pertama dan kemudian Anda ingin melakukan beberapa operasi pada file kode ini akan sangat membantu.
sumber
Jika mengiris bisa bekerja pada iterator ...
sumber
sumber
Untuk menggeneralisasi tugas membaca beberapa baris header dan untuk meningkatkan keterbacaan, saya akan menggunakan metode ekstraksi. Misalkan Anda ingin tokenize tiga baris pertama
coordinates.txt
untuk digunakan sebagai informasi header.Contoh
Kemudian ekstraksi metode memungkinkan Anda menentukan apa yang ingin Anda lakukan dengan informasi tajuk (dalam contoh ini kami cukup memberi tokenize pada baris tajuk berdasarkan koma dan mengembalikannya sebagai daftar tetapi ada ruang untuk melakukan lebih banyak lagi).
Keluaran
Jika
coordinates.txt
berisi tajuk baris lain, cukup ubahnumberheaderlines
. Yang terbaik dari semuanya, jelas apa__readheader(rh, numberheaderlines=2)
yang dilakukan dan kami menghindari kerancuan karena harus mencari tahu atau mengomentari mengapa penulis jawaban yang diterima menggunakannext()
kode ini.sumber
Jika Anda ingin membaca beberapa file CSV mulai dari baris 2, ini berfungsi seperti pesona
(ini adalah bagian dari jawaban Parfait untuk pertanyaan yang berbeda)
sumber
sumber