Dengan Python, menelepon
temp = open(filename,'r').readlines()
menghasilkan daftar di mana setiap elemen adalah baris dalam file. Agak bodoh tapi tetap saja: readlines()
juga menulis karakter baris baru untuk setiap elemen, sesuatu yang saya tidak ingin terjadi.
Bagaimana saya bisa menghindarinya?
python
line-breaks
readlines
Yotam
sumber
sumber
[l.strip('\n\r') for l in temp]
. Atau bahkanrstrip
. Dan karena iterasi di sini bisain open
bukanin temp
.newline
argumen terbuka untuk baris baru yang dikompilasi itu.Jawaban:
Anda dapat membaca seluruh file dan membagi baris menggunakan
str.splitlines
:Atau Anda dapat menghapus baris baru dengan tangan:
Catatan: solusi terakhir ini hanya berfungsi jika file diakhiri dengan baris baru, jika tidak baris terakhir akan kehilangan satu karakter.
Asumsi ini benar dalam kebanyakan kasus (terutama untuk file yang dibuat oleh editor teks, yang sering melakukan menambahkan baris baru berakhir pula).
Jika Anda ingin menghindari ini, Anda dapat menambahkan baris baru di akhir file:
Atau alternatif yang lebih sederhana adalah ke
strip
baris baru sebagai gantinya:Atau bahkan, meskipun sangat tidak terbaca:
Yang mengeksploitasi fakta bahwa nilai balik
or
bukan boolean, tetapi objek yang dievaluasi benar atau salah.The
readlines
Metode ini sebenarnya setara dengan:Karena
readline()
menyimpan baris baru jugareadlines()
menyimpannya.Catatan: untuk simetri ke
readlines()
dalamwritelines()
metode tidak tidak menambahkan berakhir baris, sehinggaf2.writelines(f.readlines())
menghasilkan salinan darif
dalamf2
.sumber
[line.rstrip('\n') for line in file]
akan menghapus lebih dari satu trailing\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
bisa jadi malah[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
menutup file ketika blok berakhir, yang berarti Anda tidak dapat melakukanwith open(...) as f: lines = (line for line in f)
dan menggunakan dilines
luarwith
karena Anda akan mendapatkan kesalahan I / O. Anda bisa malas menggunakan genexp, tetapi Anda harus mengkonsumsinya sebelum menutup file.sumber
\r\n
baris baru? ;).split('\n')
akan terpecah dengan benar, terlepas dari konvensi baris baru. Akan menjadi masalah jika Anda membaca file dalam mode biner. Dalam hal inisplitlines()
menangani baris baru universal sementarasplit('\n')
tidak.os.linesep
:)\r\n
akhir baris sistem saya tidak dikonversi\n
, apakah dibaca sebagai teks atau biner, jadios.linesep
akan bekerja di tempat yang\n
tidak. Tapisplitlines
jelas pilihan yang lebih baik, jika Anda menyebutkan di mana file tidak cocok dengan os. Sungguh saya sebagian besar menyebutkannya kalau-kalau orang yang melihat diskusi ini tidak menyadari keberadaannya.\r\n
akan dikonversi untuk file teks bahkan ketika Anda berjalan di Linux.contoh lain:
Membaca file satu baris pada saat itu. Menghapus karakter yang tidak diinginkan dengan dari ujung string
str.rstrip(chars)
lihat juga
str.strip([chars])
danstr.lstrip([chars])
(python> = 2.0)
sumber
sumber
Saya pikir ini adalah pilihan terbaik.
sumber
temp = [line.rstrip() for line in file.readlines()]
untuk mendapatkan apa yang dimaksudkan oleh @Roland_Illig notes..readlines()
, Anda secara efektif mengulangi seluruh file dua kali.Coba ini:
sumber
sumber
.readlines()
seperti ini, Anda secara efektif mengulangi seluruh file dua kali.sumber
sumber