Kami memiliki file data mentah besar yang ingin kami pangkas ke ukuran yang ditentukan. Saya berpengalaman dalam. Net c #, namun ingin melakukan ini dengan python untuk menyederhanakan hal-hal dan tidak menarik.
Bagaimana cara saya mendapatkan N baris pertama dari file teks dengan python? Apakah OS yang digunakan akan berpengaruh pada implementasi?
Jawaban:
Python 2
Python 3
Inilah cara lain (keduanya Python 2 & 3)
sumber
sumber
f = open("file")
tanpa kecuali menangani untuk menutup file. Cara Pythonic untuk menangani file adalah dengan manajer konteks, yaitu menggunakan pernyataan with. Ini tercakup dalam input input tutorial Python ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Jika Anda ingin membaca baris pertama dengan cepat dan Anda tidak peduli dengan kinerja, Anda dapat menggunakan
.readlines()
objek daftar pengembalian dan kemudian mengiris daftar.Misalnya untuk 5 baris pertama:
Salah satu keunggulan dibandingkan dengan jawaban lain adalah kemungkinan untuk memilih dengan mudah rentang garis misalnya melewatkan 10 baris pertama
[10:30]
atau 10 terakhir[:-10]
atau hanya mengambil garis genap[::2]
.sumber
Apa yang saya lakukan adalah memanggil saluran N menggunakan
pandas
. Saya pikir kinerjanya bukan yang terbaik, tetapi misalnya jikaN=1000
:sumber
nrows
opsi, yang dapat diatur ke 1000 dan seluruh file tidak dimuat. pandas.pydata.org/pandas-docs/stable/generated/... Secara umum, panda memiliki ini dan teknik hemat memori lainnya untuk file besar.sep
untuk mendefinisikan pembatas kolom (yang seharusnya tidak terjadi pada file non-csv)pandas.read()
fungsi dalam dokumentasi, apakah Anda tahu informasi tentang subjek?Tidak ada metode khusus untuk membaca jumlah baris yang diekspos oleh objek file.
Saya kira cara termudah adalah sebagai berikut:
sumber
Berdasarkan gnibbler, jawaban pilihan teratas (20 November 2009 di 0:27): kelas ini menambahkan metode head () dan tail () ke file objek.
Pemakaian:
sumber
Dua cara paling intuitif untuk melakukan ini adalah:
Iterate pada file baris demi baris, dan
break
setelahN
baris.Iterate pada file baris demi baris menggunakan
next()
metodeN
kali. (Ini pada dasarnya hanya sintaks yang berbeda untuk apa jawaban atas tidak.)Ini kodenya:
Intinya adalah, selama Anda tidak menggunakan
readlines()
atauenumerate
memasukkan seluruh file ke dalam memori, Anda memiliki banyak pilihan.sumber
cara yang paling nyaman sendiri:
Solusi berdasarkan Pemahaman Daftar Fungsi open () mendukung antarmuka iterasi. Enumerate () mencakup open () dan return tuple (index, item), lalu kami memeriksa bahwa kami berada di dalam rentang yang diterima (jika saya <LINE_COUNT) dan kemudian cukup mencetak hasilnya.
Nikmati Python. ;)
sumber
[next(file) for _ in range(LINE_COUNT)]
.Untuk 5 baris pertama, cukup lakukan:
sumber
Jika Anda menginginkan sesuatu yang jelas (tanpa mencari hal-hal esoterik dalam manual) berfungsi tanpa impor dan coba / kecuali dan bekerja pada sejumlah versi Python 2.x (2.2 hingga 2.6):
sumber
Jika Anda memiliki file yang sangat besar, dan dengan asumsi Anda ingin output menjadi array yang numpy, menggunakan np.genfromtxt akan membekukan komputer Anda. Ini jauh lebih baik dalam pengalaman saya:
sumber
Mulai dari Python 2.6, Anda dapat memanfaatkan fungsi yang lebih canggih di basis IO dasar. Jadi jawaban berperingkat teratas di atas dapat ditulis ulang sebagai:
(Anda tidak perlu khawatir file Anda memiliki kurang dari N baris karena tidak ada pengecualian StopIteration yang dilemparkan.)
sumber
lines
tetapi argumen merujukbytes
.Ini berhasil untuk saya
sumber
Ini berfungsi untuk Python 2 & 3:
sumber
sumber
Metode ini Berhasil bagi saya
sumber