[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-python-ile-dosya-okuma-ve-yazma-with-kullanimi-open-parametreleri-ve-pratik":3},{"dataItem":4,"heading":36,"metaData":38,"schema":81},["Reactive",5],{"id":6,"title":7,"summary":8,"content":9,"seo_title":10,"seo_description":11,"seo_keywords":12,"slug":13,"createdAt":14,"updatedAt":14,"blog_categories":15,"authors":19,"image":24,"thumb":25,"image_webp":26,"thumb_webp":27,"rating":28,"heading_title":7,"heading_sub_title":17,"readingTime":29,"url":34,"comments":35,"meta_cover":24},20966,"Python ile Dosya Okuma ve Yazma: with Kullanımı, open() Parametreleri ve Pratik ","Bu rehber, Python’da dosya okuma/yazma işlemlerini with open(...) as f: deseniyle doğru şekilde yapmayı anlatır. open() kipleri (r/w/a), encoding ve newline gibi kritik parametreleri, text ve ikili (binary) farklarını ve csv modülüyle CSV okuma-yazma örneklerini pratik Python snippet’leriyle açıklar.","\u003Ch2>Python’da dosya işlemlerinde neden \u003Cem>with\u003C/em> kullanılır?\u003C/h2>\n\u003Cp>Dosya okuma ve yazma, en sık kullanılan Python görevlerinden biridir. Buradaki temel hedefiniz iki şeydir: (1) dosyayı doğru kipte (mode) açmak, (2) işiniz bittiğinde dosya tanıtıcısını güvenilir biçimde kapatmak. Python’da bunun standart yolu \u003Cstrong>context manager\u003C/strong> yaklaşımıdır:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>with open('ornek.txt', 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;icerik = f.read()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;print(icerik)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Bu desen, blok bittiğinde (hata oluşsa bile) dosyanın kapatılmasına yardımcı olur. \u003Cem>with\u003C/em> ifadesinin arkasındaki mekanizma, context manager protokolünü (\u003Cstrong>__enter__\u003C/strong> / \u003Cstrong>__exit__\u003C/strong>) standartlaştırır (PEP 343). Bu sayede manuel olarak \u003Cem>close()\u003C/em> çağırmayı unutma riski azalır.\u003C/p>\n\u003Cp>İlgili resmi kaynaklar: \u003Ca href=\"https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files\">Python Tutorial – Reading and Writing Files\u003C/a>, \u003Ca href=\"https://peps.python.org/pep-0343/\">PEP 343 – The with Statement\u003C/a>.\u003C/p>\n\u003Chr>\n\n\u003Ch2>open() fonksiyonunun temeli: kip (mode), encoding ve newline\u003C/h2>\n\u003Cp>Python’da dosya açmanın merkezi API’si \u003Cstrong>open()\u003C/strong> fonksiyonudur. Resmi referansa göre \u003Cem>mode\u003C/em>, \u003Cem>encoding\u003C/em>, \u003Cem>newline\u003C/em>, \u003Cem>errors\u003C/em> gibi parametreler davranışı doğrudan etkiler. Ayrıntılı parametre listesi için: \u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">Built-in Functions – open()\u003C/a>.\u003C/p>\n\n\u003Ch3>En sık kullanılan kip (mode) değerleri\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Kip\u003C/th>\u003Cth>Anlamı\u003C/th>\u003Cth>Ne zaman kullanılır?\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>'r'\u003C/td>\u003Ctd>Okuma (text)\u003C/td>\u003Ctd>Var olan bir metin dosyasını okumak\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>'w'\u003C/td>\u003Ctd>Yazma (text), dosyayı sıfırlar/oluşturur\u003C/td>\u003Ctd>Yeni içerik yazmak (mevcut içerik gerekiyorsa dikkat)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>'a'\u003C/td>\u003Ctd>Dosya sonuna ekleme (text)\u003C/td>\u003Ctd>Log benzeri satır eklemek\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>'rb'\u003C/td>\u003Ctd>Okuma (ikili / binary)\u003C/td>\u003Ctd>Görüntü, PDF, ikili veri okumak\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>'wb'\u003C/td>\u003Ctd>Yazma (ikili / binary)\u003C/td>\u003Ctd>İkili veri yazmak\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>'r+'\u003C/td>\u003Ctd>Okuma + yazma\u003C/td>\u003Ctd>Tek dosya üzerinde hem okuma hem güncelleme\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>\u003Cstrong>Not:\u003C/strong> Text kipinde (ör. 'r', 'w') veri türü \u003Cem>str\u003C/em> olur; ikili (binary) kipte (ör. 'rb', 'wb') veri türü \u003Cem>bytes\u003C/em> olur. Resmi dokümana göre ikili kiplerde \u003Cem>encoding\u003C/em> parametresi uygulanmaz; çünkü metin dönüştürme yapılmaz (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open() referansı\u003C/a>).\u003C/p>\n\n\u003Ch3>encoding neden önemlidir?\u003C/h3>\n\u003Cp>Metin dosyalarıyla çalışırken en sık sorun, karakter kodlaması (encoding) kaynaklıdır. Resmi dokümana göre \u003Cstrong>encoding belirtilmezse varsayılan değer platforma bağlıdır\u003C/strong>. Bu nedenle, özellikle ekip çalışmasında ve farklı işletim sistemlerinde tutarlı davranış istiyorsanız örneklerde olduğu gibi \u003Cstrong>encoding='utf-8'\u003C/strong> belirtmek iyi bir alışkanlıktır (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open() dokümantasyonu\u003C/a>).\u003C/p>\n\n\u003Ch3>newline parametresi ne işe yarar?\u003C/h3>\n\u003Cp>Text kipinde Python satır sonlarını (\\n, \\r\\n) belirli kurallarla dönüştürebilir. Bu çoğu zaman işinizi kolaylaştırır; ancak CSV gibi biçimlerde satır sonu yönetimi hassas olabilir. CSV modülü dokümantasyonu, CSV okuma/yazma sırasında çoğunlukla \u003Cstrong>newline=''\u003C/strong> kullanılmasını önerir (\u003Ca href=\"https://docs.python.org/3/library/csv.html\">csv — CSV File Reading and Writing\u003C/a>).\u003C/p>\n\u003Chr>\n\n\u003Ch2>Pratik okuma örnekleri (read, readline, readlines)\u003C/h2>\n\u003Ch3>Tüm dosyayı tek seferde okumak\u003C/h3>\n\u003Cp>Küçük dosyalar için en basit yaklaşım:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>with open('veri.txt', 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;metin = f.read()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;print(metin)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Dosya çok büyükse \u003Cem>read()\u003C/em> bellek kullanımını artırabilir. Bu durumda satır satır okumak daha uygundur.\u003C/p>\n\n\u003Ch3>Satır satır okumak (önerilen desen)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>with open('veri.txt', 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;for satir in f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;satir = satir.rstrip('\\n')\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;print(satir)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Bu desen, dosyayı iterator olarak kullanır ve tipik olarak büyük dosyalarda daha kontrollüdür. \u003Cem>rstrip\u003C/em> ile satır sonlarını normalize etmek, iş mantığınıza göre faydalı olabilir.\u003C/p>\n\n\u003Ch3>İlk N satırı okumak\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>def ilk_n_satir(dosya_yolu, n=10):\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;with open(dosya_yolu, 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;for i, satir in enumerate(f):\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if i &gt;= n:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>6\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield satir.rstrip('\\n')\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Chr>\n\n\u003Ch2>Pratik yazma örnekleri (write, writelines, append)\u003C/h2>\n\u003Ch3>Dosyaya metin yazmak (w)\u003C/h3>\n\u003Cp>\u003Cstrong>'w'\u003C/strong> kipi dosyayı sıfırlar veya yoksa oluşturur:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>satirlar = ['Merhaba', 'Dunya']\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>with open('cikti.txt', 'w', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;for s in satirlar:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;f.write(s + '\\n')\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Satır sonunu kendiniz eklediğinize dikkat edin; \u003Cem>write()\u003C/em> otomatik olarak eklemez.\u003C/p>\n\n\u003Ch3>Dosyanın sonuna ekleme yapmak (a)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>with open('uygulama.log', 'a', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;f.write('Yeni kayit eklendi\\n')\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\n\u003Ch3>İkili (binary) yazma/okuma (rb/wb)\u003C/h3>\n\u003Cp>Görüntü veya indirilen bir dosya gibi ikili verilerde text dönüşümü istemezsiniz:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd># Kopyalama ornegi (binary)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>with open('girdi.bin', 'rb') as src:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;veri = src.read()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>with open('cikti.bin', 'wb') as dst:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;dst.write(veri)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Resmi dokümanlara göre ikili kipte veri \u003Cem>bytes\u003C/em> olarak gelir ve \u003Cem>encoding\u003C/em> kullanılmaz (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open()\u003C/a>).\u003C/p>\n\u003Chr>\n\n\u003Ch2>Hata yönetimi: with + try/except nasıl birlikte kullanılır?\u003C/h2>\n\u003Cp>\u003Cem>with\u003C/em> size kaynak yönetimini sağlar; ancak uygulamada dosyanın bulunmaması, izin hatası veya beklenmeyen içerik gibi durumlar olabilir. Bu yüzden dosya işlemlerini \u003Cstrong>try/except\u003C/strong> ile sarmalamak pratik bir yaklaşımdır:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>dosya_yolu = 'veri.txt'\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>try:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;with open(dosya_yolu, 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;print(f.read())\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>except FileNotFoundError:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>6\u003C/td>\u003Ctd>&nbsp;&nbsp;print('Dosya bulunamadi:', dosya_yolu)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>7\u003C/td>\u003Ctd>except UnicodeDecodeError:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>8\u003C/td>\u003Ctd>&nbsp;&nbsp;print('Encoding uyusmazligi olabilir. encoding parametresini kontrol edin.')\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>Encoding uyuşmazlığı olasılığında ilk adım genellikle \u003Cstrong>encoding\u003C/strong> parametresini açıkça belirlemek ve kaynağın gerçek kodlamasını doğrulamaktır. Varsayılan encoding’in platforma göre değişebileceğini unutmayın (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open() referansı\u003C/a>).\u003C/p>\n\u003Chr>\n\n\u003Ch2>CSV okuma/yazma: newline='' ve DictReader/DictWriter\u003C/h2>\n\u003Cp>CSV, “metin dosyası gibi görünen” ama ayrıştırma kuralları olan bir formattır. Python’un standart kütüphanesinde \u003Cstrong>csv\u003C/strong> modülü bulunur ve resmi doküman, okuma/yazmada \u003Cstrong>newline=''\u003C/strong> kullanımını özellikle vurgular (\u003Ca href=\"https://docs.python.org/3/library/csv.html\">csv dokümanı\u003C/a>).\u003C/p>\n\n\u003Ch3>Basit CSV okuma (csv.reader)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>import csv\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>with open('kisiler.csv', 'r', encoding='utf-8', newline='') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;okuyucu = csv.reader(f)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;for satir in okuyucu:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;print(satir)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>\u003Cem>satir\u003C/em> burada bir liste olur. Ayracı (delimiter) farklıysa \u003Cem>csv.reader(f, delimiter=';')\u003C/em> gibi ayarlayabilirsiniz. CSV dokümanı, farklı biçimler için \u003Cem>dialect\u003C/em> yaklaşımından da bahseder.\u003C/p>\n\n\u003Ch3>Başlıklı CSV okuma (csv.DictReader)\u003C/h3>\n\u003Cp>Sütun adlarıyla çalışmak çoğu genel kullanımda daha okunabilirdir:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>import csv\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>with open('kisiler.csv', 'r', encoding='utf-8', newline='') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;okuyucu = csv.DictReader(f)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;for kayit in okuyucu:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;print(kayit['isim'], kayit['email'])\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\n\u003Ch3>CSV yazma (csv.writer)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>import csv\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>satirlar = [\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;['isim', 'email'],\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;['Ada', 'ada@example.com'],\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;['Linus', 'linus@example.com'],\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>6\u003C/td>\u003Ctd>]\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>7\u003C/td>\u003Ctd>with open('cikti.csv', 'w', encoding='utf-8', newline='') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>8\u003C/td>\u003Ctd>&nbsp;&nbsp;yazici = csv.writer(f)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>9\u003C/td>\u003Ctd>&nbsp;&nbsp;yazici.writerows(satirlar)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\n\u003Ch3>Başlıklı CSV yazma (csv.DictWriter)\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>import csv\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>alanlar = ['isim', 'email']\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>kayitlar = [\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;{'isim': 'Ada', 'email': 'ada@example.com'},\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;{'isim': 'Linus', 'email': 'linus@example.com'},\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>6\u003C/td>\u003Ctd>]\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>7\u003C/td>\u003Ctd>with open('cikti2.csv', 'w', encoding='utf-8', newline='') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>8\u003C/td>\u003Ctd>&nbsp;&nbsp;yazici = csv.DictWriter(f, fieldnames=alanlar)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>9\u003C/td>\u003Ctd>&nbsp;&nbsp;yazici.writeheader()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>10\u003C/td>\u003Ctd>&nbsp;&nbsp;yazici.writerows(kayitlar)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Chr>\n\n\u003Ch2>open() için hızlı kontrol listesi\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>with kullanın:\u003C/strong> Dosyanın blok sonunda kapanmasına yardımcı olur (PEP 343 ve tutorial örnekleri).\u003C/li>\n\u003Cli>\u003Cstrong>Kip (mode) doğru mu?\u003C/strong> Okuma için 'r', yazma için 'w', ekleme için 'a'; ikili veriler için 'rb'/'wb'.\u003C/li>\n\u003Cli>\u003Cstrong>encoding belirli mi?\u003C/strong> Metin dosyalarında mümkünse \u003Cstrong>encoding='utf-8'\u003C/strong> kullanın; varsayılan encoding platforma bağlı olabilir (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open()\u003C/a>).\u003C/li>\n\u003Cli>\u003Cstrong>CSV ise newline='':\u003C/strong> CSV okuma/yazmada satır sonu dönüşümlerini azaltmak için yaygın öneridir (\u003Ca href=\"https://docs.python.org/3/library/csv.html\">csv\u003C/a>).\u003C/li>\n\u003Cli>\u003Cstrong>Hata senaryolarını düşünün:\u003C/strong> FileNotFoundError, PermissionError, UnicodeDecodeError gibi durumlar için try/except ekleyin.\u003C/li>\n\u003C/ul>\n\u003Chr>\n\n\u003Ch2>Mini tarifler: günlük kullanım senaryoları\u003C/h2>\n\u003Ch3>1) Metin dosyasından anahtar-değer okumak\u003C/h3>\n\u003Cp>Basit bir yapılandırma dosyası gibi \u003Cem>anahtar=deger\u003C/em> satırlarını okumak için:\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>def oku_kv(dosya_yolu):\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;sonuc = {}\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;with open(dosya_yolu, 'r', encoding='utf-8') as f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;for satir in f:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;satir = satir.strip()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>6\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not satir or satir.startswith('#'):\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>7\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>8\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anahtar, deger = satir.split('=', 1)\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>9\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sonuc[anahtar.strip()] = deger.strip()\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>10\u003C/td>\u003Ctd>&nbsp;&nbsp;return sonuc\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\n\u003Ch3>2) Büyük dosyada filtreleyip yeni dosyaya yazmak\u003C/h3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Satır\u003C/th>\u003Cth>Kod\u003C/th>\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>1\u003C/td>\u003Ctd>def filtrele(girdi, cikti, kelime):\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>2\u003C/td>\u003Ctd>&nbsp;&nbsp;with open(girdi, 'r', encoding='utf-8') as fin, open(cikti, 'w', encoding='utf-8') as fout:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>3\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;for satir in fin:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>4\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if kelime in satir:\u003C/td>\u003C/tr>\n\u003Ctr>\u003Ctd>5\u003C/td>\u003Ctd>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fout.write(satir)\u003C/td>\u003C/tr>\n\u003C/tbody>\n\u003C/table>\n\u003Cp>İki dosyayı aynı \u003Cem>with\u003C/em> ifadesinde açmak, akışı sadeleştirir. Bu yaklaşım Python tutorial örnekleriyle uyumludur (\u003Ca href=\"https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files\">Reading and Writing Files\u003C/a>).\u003C/p>\n\u003Chr>\n\n\u003Ch2>Sık yapılan hatalar ve nasıl önlenir?\u003C/h2>\n\u003Ch3>“encoding yazmayı unuttum, bazı karakterler bozuldu”\u003C/h3>\n\u003Cp>Çözüm: Metin dosyalarında \u003Cstrong>encoding\u003C/strong> parametresini açıkça belirtin. Resmi doküman, varsayılan encoding’in ortama göre değişebileceğini belirtir (\u003Ca href=\"https://docs.python.org/3/library/functions.html#open\">open()\u003C/a>).\u003C/p>\n\n\u003Ch3>“CSV’de boş satırlar oluşuyor”\u003C/h3>\n\u003Cp>Çözüm: CSV okuma/yazmada dosyayı \u003Cstrong>newline=''\u003C/strong> ile açmayı deneyin. Bu, csv modülü dokümantasyonunda önerilen yaygın bir pratiktir (\u003Ca href=\"https://docs.python.org/3/library/csv.html\">csv\u003C/a>).\u003C/p>\n\n\u003Ch3>“Dosyayı kapatmayı unuttum”\u003C/h3>\n\u003Cp>Çözüm: Standart yaklaşım \u003Cstrong>with open(...) as f:\u003C/strong> kullanmaktır. \u003Cem>with\u003C/em> ifadesinin tasarım amacı kaynak yönetimini güvenilir hale getirmektir (PEP 343; ayrıca tutorial örnekleri).\u003C/p>\n\u003Chr>\n\n\u003Ch2>Sonuç\u003C/h2>\n\u003Cp>Python’da dosya okuma/yazma işinin omurgası \u003Cstrong>with open()\u003C/strong> desenidir. Doğru kip (mode) seçimi, metin dosyalarında \u003Cstrong>encoding='utf-8'\u003C/strong> tercih etmek ve CSV için \u003Cstrong>newline=''\u003C/strong> gibi ayrıntılar; kodun farklı ortamlarda daha tutarlı çalışmasına yardımcı olur. Daha derine inmek için resmi kaynaklardan \u003Ca href=\"https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files\">Reading and Writing Files\u003C/a> ve \u003Ca href=\"https://docs.python.org/3/library/csv.html\">csv\u003C/a> sayfalarını yer imlerine ekleyebilirsiniz.\u003C/p>","Python Dosya Okuma ve Yazma: with open(), Kipler, Encoding,","Python’da dosya okuma/yazmayı with open() ile güvenle yapın. Kipler (r/w/a), encoding ve newline, text-binary farkı ve CSV örnekleri.","python dosya okuma, python dosya yazma, with open, open() parametreleri, python encoding utf-8, newline parametresi, text vs binary, csv reader writer, context manager, PEP 343","python-ile-dosya-okuma-ve-yazma-with-kullanimi-open-parametreleri-ve-pratik","2026-03-07T19:59:44.000Z",{"id":16,"title":17,"slug":18},210,"Python Dosya İşlemleri","python-dosya-islemleri",{"id":20,"name":21,"nickname":22,"slug":23},92,"Burak Demirtaş","CodeMentor","burak-demirtas","/media/blog/ec67661e87052a78893bbe63dd9ffae2.jpg","/media/blog/ec67661e87052a78893bbe63dd9ffae2_thumb.jpg","/media/blog/ec67661e87052a78893bbe63dd9ffae2.webp","/media/blog/ec67661e87052a78893bbe63dd9ffae2_thumb.webp",null,{"minutes":30,"wordCount":31,"imageCount":32,"formatted":33},8,1437,0,"8 dk okuma süresi","/blog/python-dosya-islemleri/python-ile-dosya-okuma-ve-yazma-with-kullanimi-open-parametreleri-ve-pratik",[],["Reactive",37],{"title":7,"subTitle":17,"image":24},["Reactive",39],{"title":10,"meta":40,"link":75},[41,43,45,48,51,54,57,60,63,66,69,71,73],{"hid":42,"name":42,"content":11},"description",{"hid":44,"name":44,"content":12},"keywords",{"hid":46,"name":46,"content":47},"author","Başlangıç Seviyesi Kod & Snippet Rehberi",{"hid":49,"name":49,"content":50},"robots","index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1",{"hid":52,"property":52,"content":53},"og:type","website",{"hid":55,"property":55,"content":56},"og:title","Başlangıç Kod & Snippet Rehberi | KodÖğreniyorum",{"hid":58,"property":58,"content":59},"og:description","Yeni başlayanlara yönelik kısa kod örnekleri, snippet'ler ve adım adım alıştırmalar. Hızlı uygulamalarla temel programlama mantığını pekiştir.",{"hid":61,"property":61,"content":62},"og:image","https://kodogreniyorum.com/media/blog/ec67661e87052a78893bbe63dd9ffae2.jpg",{"hid":64,"property":64,"content":65},"og:url","https://kodogreniyorum.com/blog/python-dosya-islemleri/python-ile-dosya-okuma-ve-yazma-with-kullanimi-open-parametreleri-ve-pratik",{"hid":67,"name":67,"content":68},"twitter:card","summary_large_image",{"hid":70,"name":70,"content":56},"twitter:title",{"hid":72,"name":72,"content":59},"twitter:description",{"hid":74,"name":74,"content":62},"twitter:image",[76,78],{"rel":77,"href":65},"canonical",{"rel":79,"href":80},"amphtml","https://amp.kodogreniyorum.com/blog/python-dosya-islemleri/python-ile-dosya-okuma-ve-yazma-with-kullanimi-open-parametreleri-ve-pratik",["Reactive",82],{"@context":83,"@graph":84},"https://schema.org",[85,98],{"@type":86,"headline":10,"image":62,"author":87,"publisher":90,"datePublished":14,"dateModified":14,"mainEntityOfPage":96,"description":11},"BlogPosting",{"@type":88,"name":21,"url":89},"Person","https://kodogreniyorum.com/yazarlar/burak-demirtas",{"@type":91,"name":47,"logo":92},"Organization",{"@type":93,"url":94,"width":95,"height":95},"ImageObject","https://kodogreniyorum.com/img/icons/favicon.png",32,{"@type":97,"@id":65},"WebPage",{"@type":99,"itemListElement":100},"BreadcrumbList",[101,106,110,113],{"@type":102,"position":103,"name":104,"item":105},"ListItem",1,"Ana Sayfa","https://kodogreniyorum.com",{"@type":102,"position":107,"name":108,"item":109},2,"Blog","https://kodogreniyorum.com/blog",{"@type":102,"position":111,"name":17,"item":112},3,"https://kodogreniyorum.com/blog/python-dosya-islemleri",{"@type":102,"position":114,"name":7,"item":65},4]