düzeltilmiş kodu pasladım, o satırları benimkilerle değiştirseniz yeterli. eğer ki kastınız hata açıklaması ise, belirttiğim üzere
for line in open([...]) yazmanız durumunda
line değişkeni yeni satır karakterini (\n=0xa) de kapsamakta. peki bu davranışın sebebi nedir? minik bir analiz sonucu bunun da cevabını bulabiliriz.
open([...]) fonksiyonu aslen
_io.open (Modules/_io/_iomodule.c:228) zımbırtısına denktir ve ilgili fonksiyonun dönüt değeri
(PyObject *)&PyTextIOWrapper_Type formundadır. nesnenin takdir edebileceğiniz üzere iteratif bir elemana ihtiyacı var,
(iternextfunc)textiowrapper_iternext olarak tanılı iterasyon fonksiyonu da her satırı
_textiowrapper_readline([...]) vasıtasıyla işler. eh, veriyi satır satır alabilmesi adına her satırın başlangıç ve bitiş pozisyonlarına ihtiyacı var; bi' de o satırın
_PyIO_find_line_ending([...]) ile elde edeceği uzunluğuna.
pratik bir sebepten olacak, python derleyicisi işlediği satırı ardındaki yeni satır karakteriyle,
endpos = _PyIO_find_line_ending([...]) konumuyla beraber alır; hatta belirtilmesi durumunda birtakım standartlar ışığında dönüşümünü de yapar. böyle böyle, python derleyicisinin
Modules/_io/textio.c:2248 satırına müdahale edilmesi durumunda
PyObject *s = PyUnicode_Substring(line, start, endpos) yerine
PyObject *s = PyUnicode_Substring(line, start, endpos-1) yazılarak esasında istenilen sonuç yaratılabilir, satır ardından yeni satır karakteri getirmez. ancak bu patch beraberinde birtakım sorunlar da doğurmakta, zira yamalı versiyonun kurulumu esnasında bu modül, örneğin POSIX çevre değişkenlerinin tanılanması esnasında çağrılmakta ve
re.compile("[...]\n").match(fp.readline()) misali düzenli ifadelerinde değişkenin sonunda yeni satır karakteri beklemekte.
o sebepten
_io.TextIOWrapper tipi üstüne iterasyonda bulunurken değişkenin whitespace karakter ile sonlanacağını kabullenmekte fayda var. haliyle değişkenin evvelinde
line.strip() biçiminde bi' kırpılması şart. ha diyorsanız yok mudur başka yolu, elbette var; iteratif bir kullanım üstüne ısrarcıysanızdır diye şeettim.
her ne ise, kolay gelsin. detaylı meali budur.