with open("cetvel.txt","r",encoding="utf-8") as file:
a=file.readlines()
x=[]
for i in a:
print(i.strip())
b=i.replace("\n"," ")
c=b.replace("\t"," ")
x.append(c)
bu şekilde yaptım ben ama sanki biraz gereksiz uzun oldu daha kısa bir yolu var mıdır?
Bir dosyanın satırlarını gezip iş yapacaksanız readlines kullanmamanız tavsiye olunur zira readlines tüm dosyayı bir anda hafızaya alıyor (“slurping”), bu da boyutu büyük olan dosyalar için istenen bir durum değil. Aynı durum read için de geçerli. Bunların yerine direkt şöyle yazabilirsiniz:
for satir in file:
...
( i, x, b gibi çok da mânalı olmayan değişken isimlerinden kaçınmak da iyi olur)
Bunu kullandığınız iyi olmuş fakat .strip metodu aldığı string’i değiştirmeyip strip ettiği string’i döndürdüğü için o değeri karşılamanız gerekir (.replace’de yaptığınız gibi), yani:
for satir in file:
satir = satir.strip()
Burada i zaten dosyadan gelen bir satır olduğu için en fazla sonunda bir tane \n bulunabilir, onu da zaten bir önceki satırdaki .strip hallediyor, buna gerek kalmıyor.
Bu işlem nizami, değişken isimleri hariç tabii :d
Yani son durum şöyle oldu:
with open("cetvel.txt","r",encoding="utf-8") as file:
istenen_liste = []
for satir in file:
satir = satir.strip()
satir = satir.replace("\t", " ")
istenen_liste.append(satir)
Bu “for ile dönüp bir listeye koşullu/koşulsuz bir şeyler ekleme” gayet yaygın bir durum ve bunun için list comprehension kullanmamız daha iyi / hızlı olur:
with open("cetvel.txt","r",encoding="utf-8") as file:
istenen_liste = [satir.strip().replace("\t", " ") for satir in file]
.strip ile .replace’i zincirleme kullanabildik çünkü her ikisi de gerekli işlemi yapıp birer string döndürüyorlar.
özellikle lst comprehension yönteminize bayıldım süper baya birşey kaptım burdan çok teşekkürler ayrıca değişken isimlerini harflere atamaya gelince bana böyle çok daha kolay ve okunaklı geliyor ama biliyorum dışarıdan bakan birisi için çok zor acemiliği atana kadar bazen karışık bazen de sadece harf verriyorum… öteki türlü olduğu zman ilginç gelecek biliyorum ama çok karışıkmış gibi geliyor bna kod
File IO'nun .readlines() metodunu kullanmaktansa .read() metodu ile bir string elde ettikten sonra stringlerin .splitlines() metodunu kullanabilirsiniz.