{"id":30894,"date":"2025-10-03T05:41:58","date_gmt":"2025-10-03T02:41:58","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30894"},"modified":"2025-10-03T05:41:58","modified_gmt":"2025-10-03T02:41:58","slug":"node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/","title":{"rendered":"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma"},"content":{"rendered":"<p><body><\/p>\n<h2>Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma<\/h2>\n<p>CSV (Comma Separated Values) dosyalar\u0131, verilerin basit ve ta\u015f\u0131nabilir bir formatta depolanmas\u0131 ve de\u011fi\u015f toku\u015fu i\u00e7in yayg\u0131n olarak kullan\u0131lan metin tabanl\u0131 dosyalard\u0131r. Elektronik tablolar, veri tabanlar\u0131 ve \u00e7e\u015fitli uygulamalar aras\u0131nda veri aktar\u0131m\u0131nda kilit rol oynarlar. Node.js, arka u\u00e7 sistemleri ve veri i\u015fleme g\u00f6revleri i\u00e7in g\u00fc\u00e7l\u00fc bir platform oldu\u011fundan, CSV dosyalar\u0131n\u0131 etkili bir \u015fekilde okuyup yazabilmek b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Bu rehberde, Node.js ekosistemindeki en pop\u00fcler ve g\u00fc\u00e7l\u00fc k\u00fct\u00fcphanelerden biri olan <code>node-csv<\/code>&#8216;yi kullanarak CSV dosyalar\u0131yla nas\u0131l \u00e7al\u0131\u015f\u0131laca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<p><code>node-csv<\/code> k\u00fct\u00fcphanesi, CSV verilerini ayr\u0131\u015ft\u0131rmak (parse) ve olu\u015fturmak (stringify) i\u00e7in mod\u00fcler ve ak\u0131\u015f tabanl\u0131 (stream-based) bir yakla\u015f\u0131m sunar. Bu sayede, \u00e7ok b\u00fcy\u00fck dosyalarda bile bellek verimlili\u011fi ve y\u00fcksek performans sa\u011flan\u0131r. Bu rehberde, <code>node-csv<\/code>&#8216;nin kurulumundan ba\u015flayarak, temel okuma ve yazma i\u015flemlerine, geli\u015fmi\u015f ayarlara ve hata y\u00f6netimine kadar geni\u015f bir yelpazede pratik bilgiler ve kod \u00f6rnekleri bulacaks\u0131n\u0131z.<\/p>\n<h3>Node-CSV Kurulumu ve Temel Kullan\u0131m<\/h3>\n<p><code>node-csv<\/code> k\u00fct\u00fcphanesini kullanmaya ba\u015flamadan \u00f6nce, Node.js ve npm&#8217;in (Node Package Manager) sisteminizde kurulu oldu\u011fundan emin olmal\u0131s\u0131n\u0131z. Kurulum tamamland\u0131ktan sonra, yeni bir Node.js projesi olu\u015fturup <code>node-csv<\/code> paketini projenize ekleyebilirsiniz.<\/p>\n<h4>Node.js Ortam\u0131n\u0131z\u0131 Haz\u0131rlama<\/h4>\n<p>E\u011fer Node.js kurulu de\u011filse, resmi web sitesinden (nodejs.org) indirip kurabilirsiniz. Kurulumdan sonra, terminalinizde a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak bir proje dizini olu\u015fturun ve ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">mkdir csv-rehber\ncd csv-rehber\nnpm init -y\n<\/code><\/pre>\n<p>Bu komutlar, projeniz i\u00e7in <code>package.json<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h4>node-csv Paketini Kurma<\/h4>\n<p>\u015eimdi <code>node-csv<\/code> paketini projenize kural\u0131m. <code>node-csv<\/code> asl\u0131nda d\u00f6rt ana mod\u00fclden olu\u015fan bir meta-pakettir: <code>csv-parse<\/code> (okuma i\u00e7in), <code>csv-stringify<\/code> (yazma i\u00e7in), <code>stream-transform<\/code> (veri d\u00f6n\u00fc\u015ft\u00fcrme i\u00e7in) ve <code>stream-generate<\/code> (test verisi \u00fcretimi i\u00e7in). Tek bir <code>npm install csv<\/code> komutuyla hepsi kurulur:<\/p>\n<pre><code class=\"language-bash\">npm install csv\n<\/code><\/pre>\n<p>Kurulum tamamland\u0131\u011f\u0131nda, projeniz <code>node-csv<\/code>&#8216;nin t\u00fcm yeteneklerini kullanmaya haz\u0131r hale gelir.<\/p>\n<h3>CSV Dosyalar\u0131n\u0131 Okuma (Parsing)<\/h3>\n<p>CSV dosyalar\u0131n\u0131 okuma i\u015flemi, <code>node-csv<\/code> k\u00fct\u00fcphanesinin <code>csv-parse<\/code> mod\u00fcl\u00fc arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilir. Bu mod\u00fcl, hem callback tabanl\u0131 basit okuma i\u015flemleri hem de stream tabanl\u0131 b\u00fcy\u00fck dosya i\u015fleme yetenekleri sunar.<\/p>\n<h4>Temel CSV Okuma \u0130\u015flemi (Callback Tabanl\u0131)<\/h4>\n<p>En basit okuma y\u00f6ntemi, t\u00fcm CSV i\u00e7eri\u011fini bir string olarak al\u0131p tek seferde ayr\u0131\u015ft\u0131rmakt\u0131r. Bu y\u00f6ntem, k\u00fc\u00e7\u00fck ve orta boyutlu CSV verileri i\u00e7in uygundur.<\/p>\n<p><code>parse.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const { parse } = require('csv-parse');\n\nconst csvString = <code>id,name,email\n1,Alice,alice@example.com\n2,Bob,bob@example.com\n3,Charlie,charlie@example.com<\/code>;\n\nparse(csvString, {\n  columns: true, \/\/ \u0130lk sat\u0131r\u0131 ba\u015fl\u0131k olarak kullan ve objeler d\u00f6nd\u00fcr\n  skip_empty_lines: true \/\/ Bo\u015f sat\u0131rlar\u0131 atla\n}, (err, records) => {\n  if (err) {\n    console.error('CSV ayr\u0131\u015ft\u0131rma hatas\u0131:', err);\n    return;\n  }\n  console.log('Ayr\u0131\u015ft\u0131r\u0131lan kay\u0131tlar (objeler):', records);\n});\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Ayr\u0131\u015ft\u0131r\u0131lan kay\u0131tlar (objeler): [\n\/\/   { id: '1', name: 'Alice', email: 'alice@example.com' },\n\/\/   { id: '2', name: 'Bob', email: 'bob@example.com' },\n\/\/   { id: '3', name: 'Charlie', email: 'charlie@example.com' }\n\/\/ ]\n\nparse(csvString, (err, records) => { \/\/ columns: true olmadan, array of arrays d\u00f6ner\n  if (err) {\n    console.error('CSV ayr\u0131\u015ft\u0131rma hatas\u0131:', err);\n    return;\n  }\n  console.log('Ayr\u0131\u015ft\u0131r\u0131lan kay\u0131tlar (arrayler):', records);\n});\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Ayr\u0131\u015ft\u0131r\u0131lan kay\u0131tlar (arrayler): [\n\/\/   [ 'id', 'name', 'email' ],\n\/\/   [ '1', 'Alice', 'alice@example.com' ],\n\/\/   [ '2', 'Bob', 'bob@example.com' ],\n\/\/   [ '3', 'Charlie', 'charlie@example.com' ]\n\/\/ ]\n<\/code><\/pre>\n<p><code>columns: true<\/code> se\u00e7ene\u011fi, CSV dosyas\u0131n\u0131n ilk sat\u0131r\u0131n\u0131 s\u00fctun ba\u015fl\u0131klar\u0131 olarak kabul eder ve her kayd\u0131 bu ba\u015fl\u0131klara sahip bir JavaScript objesi olarak d\u00f6nd\u00fcr\u00fcr. Bu, verilere isimleriyle eri\u015fmeyi \u00e7ok daha kolay hale getirir. <code>skip_empty_lines: true<\/code> ise bo\u015f sat\u0131rlar\u0131 otomatik olarak atlar.<\/p>\n<h4>Dosyadan CSV Okuma (Stream Tabanl\u0131)<\/h4>\n<p>B\u00fcy\u00fck CSV dosyalar\u0131yla \u00e7al\u0131\u015f\u0131rken, dosyan\u0131n tamam\u0131n\u0131 belle\u011fe y\u00fcklemek yerine ak\u0131\u015f (stream) tabanl\u0131 bir yakla\u015f\u0131m kullanmak \u00e7ok daha verimlidir. <code>node-csv<\/code>&#8216;nin <code>parse<\/code> mod\u00fcl\u00fc, Node.js&#8217;in <code>fs.createReadStream<\/code> ile sorunsuz bir \u015fekilde entegre olur.<\/p>\n<p>\u00d6ncelikle, <code>input.csv<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-csv\">urun_kodu,urun_adi,fiyat\nA101,Laptop,12000\nB202,Klavye,850\nC303,Fare,300\n<\/code><\/pre>\n<p>\u015eimdi bu dosyay\u0131 stream kullanarak okuyal\u0131m:<\/p>\n<p><code>read_stream.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const fs = require('fs');\nconst { parse } = require('csv-parse');\n\nconst records = [];\nconst parser = parse({\n  columns: true, \/\/ Ba\u015fl\u0131k sat\u0131r\u0131n\u0131 kullan\n  delimiter: ',', \/\/ Ay\u0131r\u0131c\u0131 karakter (varsay\u0131lan)\n  skip_empty_lines: true\n});\n\nfs.createReadStream('.\/input.csv')\n  .pipe(parser)\n  .on('data', (record) => {\n    \/\/ Her bir kay\u0131t i\u015flendi\u011finde buraya gelir\n    records.push(record);\n    \/\/ console.log('Okunan kay\u0131t:', record); \/\/ Her kayd\u0131 an\u0131nda g\u00f6rmek i\u00e7in\n  })\n  .on('end', () => {\n    console.log('CSV okuma i\u015flemi tamamland\u0131.');\n    console.log('Toplam kay\u0131t say\u0131s\u0131:', records.length);\n    console.log('T\u00fcm kay\u0131tlar:', records);\n  })\n  .on('error', (err) => {\n    console.error('CSV okuma hatas\u0131:', err.message);\n  });\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>fs.createReadStream<\/code> ile <code>input.csv<\/code> dosyas\u0131ndan bir okuma ak\u0131\u015f\u0131 olu\u015fturulur. <code>.pipe(parser)<\/code> ile bu ak\u0131\u015f <code>csv-parse<\/code> ayr\u0131\u015ft\u0131r\u0131c\u0131s\u0131na y\u00f6nlendirilir. <code>parser<\/code> her bir kayd\u0131 i\u015fledi\u011finde <code>data<\/code> olay\u0131n\u0131 tetikler ve t\u00fcm dosya okundu\u011funda <code>end<\/code> olay\u0131 tetiklenir. Bu sayede dosyan\u0131n tamam\u0131n\u0131 belle\u011fe almadan sat\u0131r sat\u0131r i\u015fleyebiliriz.<\/p>\n<h4>Geli\u015fmi\u015f Okuma Ayarlar\u0131<\/h4>\n<p><code>parse<\/code> fonksiyonu veya yap\u0131c\u0131s\u0131, farkl\u0131 CSV formatlar\u0131n\u0131 desteklemek i\u00e7in \u00e7e\u015fitli se\u00e7enekler sunar:<\/p>\n<p>*   <code>delimiter<\/code>: Varsay\u0131lan olarak virg\u00fcl (<code>','<\/code>) kullan\u0131l\u0131r. Noktal\u0131 virg\u00fcl (<code>;<\/code>) veya tab (<code>\\t<\/code>) gibi farkl\u0131 bir ay\u0131r\u0131c\u0131 kullanmak i\u00e7in bu se\u00e7ene\u011fi ayarlayabilirsiniz.<br \/>\n*   <code>quote<\/code>: T\u0131rnak karakteri. Varsay\u0131lan <code>'\"'<\/code>.<br \/>\n*   <code>escape<\/code>: T\u0131rnak i\u00e7inde t\u0131rnaklar\u0131 veya ay\u0131r\u0131c\u0131lar\u0131 ka\u00e7\u0131\u015f karakteri. Varsay\u0131lan <code>'\"'<\/code>.<br \/>\n*   <code>trim<\/code>: Her alan\u0131n ba\u015f\u0131ndaki ve sonundaki bo\u015fluklar\u0131 k\u0131rpar. Varsay\u0131lan <code>false<\/code>.<br \/>\n*   <code>comment<\/code>: Yorum sat\u0131rlar\u0131n\u0131 belirten karakter. Varsay\u0131lan <code>''<\/code>.<\/p>\n<p>\u00d6rne\u011fin, noktal\u0131 virg\u00fcl ile ayr\u0131lm\u0131\u015f bir CSV dosyas\u0131n\u0131 okumak i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">const { parse } = require('csv-parse');\n\nconst semicolonCsv = <code>id;name;city\n1;Ay\u015fe;Ankara\n2;Mehmet;\u0130zmir<\/code>;\n\nparse(semicolonCsv, {\n  columns: true,\n  delimiter: ';', \/\/ Ay\u0131r\u0131c\u0131y\u0131 noktal\u0131 virg\u00fcl olarak belirle\n  trim: true \/\/ Alanlardaki bo\u015fluklar\u0131 k\u0131rp\n}, (err, records) => {\n  if (err) {\n    console.error('Hata:', err);\n    return;\n  }\n  console.log('Noktal\u0131 virg\u00fcl ile ayr\u0131\u015ft\u0131r\u0131lan kay\u0131tlar:', records);\n});\n<\/code><\/pre>\n<h3>CSV Dosyalar\u0131n\u0131 Yazma (Stringifying)<\/h3>\n<p>CSV dosyalar\u0131na veri yazma i\u015flemi, <code>node-csv<\/code> k\u00fct\u00fcphanesinin <code>csv-stringify<\/code> mod\u00fcl\u00fc arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilir. T\u0131pk\u0131 okumada oldu\u011fu gibi, yazma i\u015flemi de hem callback tabanl\u0131 hem de stream tabanl\u0131 y\u00f6ntemleri destekler.<\/p>\n<h4>Temel CSV Yazma \u0130\u015flemi (Callback Tabanl\u0131)<\/h4>\n<p>K\u00fc\u00e7\u00fck veri setlerini CSV format\u0131nda bir string&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in <code>stringify<\/code> fonksiyonunu kullanabiliriz.<\/p>\n<p><code>write.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const { stringify } = require('csv-stringify');\n\nconst records = [\n  ['Ad', 'Soyad', 'Ya\u015f'],\n  ['Can', 'Y\u0131lmaz', 30],\n  ['Deniz', 'Demir', 25]\n];\n\nstringify(records, (err, output) => {\n  if (err) {\n    console.error('CSV olu\u015fturma hatas\u0131:', err);\n    return;\n  }\n  console.log('Olu\u015fturulan CSV stringi:\\n', output);\n});\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ Olu\u015fturulan CSV stringi:\n\/\/  Ad,Soyad,Ya\u015f\n\/\/  Can,Y\u0131lmaz,30\n\/\/  Deniz,Demir,25\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, bir array of arrays&#8217;i CSV string&#8217;ine d\u00f6n\u00fc\u015ft\u00fcrd\u00fck.<\/p>\n<h4>Dosyaya CSV Yazma (Stream Tabanl\u0131)<\/h4>\n<p>B\u00fcy\u00fck veri setlerini bir CSV dosyas\u0131na yazarken stream&#8217;ler kullanmak, bellek t\u00fcketimini optimize eder ve performans\u0131 art\u0131r\u0131r.<\/p>\n<p><code>output.csv<\/code> dosyas\u0131na yazmak i\u00e7in <code>write_stream.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-javascript\">const fs = require('fs');\nconst { stringify } = require('csv-stringify');\n\nconst dataToWrite = [\n  { id: 1, product: 'Klavye', price: 850 },\n  { id: 2, product: 'Mouse', price: 300 },\n  { id: 3, product: 'Monit\u00f6r', price: 2500 }\n];\n\nconst stringifier = stringify({\n  header: true, \/\/ \u0130lk sat\u0131ra ba\u015fl\u0131klar\u0131 ekle\n  columns: ['id', 'product', 'price'], \/\/ S\u00fctun s\u0131ras\u0131n\u0131 ve isimlerini belirle\n  delimiter: ';' \/\/ Ay\u0131r\u0131c\u0131y\u0131 noktal\u0131 virg\u00fcl yapal\u0131m\n});\n\nconst writableStream = fs.createWriteStream('.\/output.csv');\n\nwritableStream.on('finish', () => {\n  console.log('CSV dosyas\u0131 ba\u015far\u0131yla yaz\u0131ld\u0131: output.csv');\n});\n\nstringifier.pipe(writableStream);\n\ndataToWrite.forEach(record => {\n  stringifier.write(record);\n});\n\nstringifier.end(); \/\/ Yazma i\u015flemini sonland\u0131r\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, bir dizi objeyi <code>output.csv<\/code> dosyas\u0131na yazd\u0131k. <code>header: true<\/code> se\u00e7ene\u011fi ile objelerin anahtarlar\u0131n\u0131 ba\u015fl\u0131k olarak ekledik. <code>columns<\/code> se\u00e7ene\u011fi ile de s\u00fctunlar\u0131n s\u0131ras\u0131n\u0131 ve hangi objelerin hangi anahtarlar\u0131n\u0131n s\u00fctun olaca\u011f\u0131n\u0131 belirledik. <code>delimiter: ';'<\/code> ile ay\u0131r\u0131c\u0131y\u0131 noktal\u0131 virg\u00fcl olarak ayarlad\u0131k.<\/p>\n<h4>Geli\u015fmi\u015f Yazma Ayarlar\u0131<\/h4>\n<p><code>stringify<\/code> fonksiyonu veya yap\u0131c\u0131s\u0131, CSV \u00e7\u0131kt\u0131s\u0131n\u0131 \u00f6zelle\u015ftirmek i\u00e7in \u00e7e\u015fitli se\u00e7enekler sunar:<\/p>\n<p>*   <code>header<\/code>: <code>true<\/code> ise, ilk sat\u0131ra s\u00fctun ba\u015fl\u0131klar\u0131n\u0131 ekler. Varsay\u0131lan <code>false<\/code>.<br \/>\n*   <code>columns<\/code>: \u00c7\u0131kt\u0131da g\u00f6r\u00fcnecek s\u00fctunlar\u0131 ve s\u0131ralar\u0131n\u0131 belirten bir dizi. Objelerle \u00e7al\u0131\u015f\u0131rken \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <code>quote<\/code>: Alanlar\u0131 \u00e7evreleyen t\u0131rnak karakteri. Varsay\u0131lan <code>'\"'<\/code>.<br \/>\n*   <code>escape<\/code>: T\u0131rnak i\u00e7inde t\u0131rnaklar\u0131 veya ay\u0131r\u0131c\u0131lar\u0131 ka\u00e7\u0131\u015f karakteri. Varsay\u0131lan <code>'\"'<\/code>.<br \/>\n*   <code>eof<\/code>: Dosyan\u0131n sonuna yeni bir sat\u0131r karakteri eklenip eklenmeyece\u011fi. Varsay\u0131lan <code>true<\/code>.<\/p>\n<p>\u00d6rne\u011fin, belirli s\u00fctunlar\u0131 belirli bir s\u0131rada ve farkl\u0131 bir t\u0131rnak karakteriyle yazmak i\u00e7in:<\/p>\n<pre><code class=\"language-javascript\">const { stringify } = require('csv-stringify');\n\nconst users = [\n  { id: 1, name: 'Ay\u015fe', email: 'ayse@example.com', city: '\u0130stanbul' },\n  { id: 2, name: 'Fatma', email: 'fatma@example.com', city: 'Ankara' }\n];\n\nstringify(users, {\n  header: true,\n  columns: ['name', 'email'], \/\/ Sadece 'name' ve 'email' s\u00fctunlar\u0131n\u0131 yaz\n  quote: \"'\" \/\/ Tek t\u0131rnak kullan\n}, (err, output) => {\n  if (err) {\n    console.error('Hata:', err);\n    return;\n  }\n  console.log('\u00d6zelle\u015ftirilmi\u015f CSV \u00e7\u0131kt\u0131s\u0131:\\n', output);\n});\n\n\/\/ \u00c7\u0131kt\u0131:\n\/\/ \u00d6zelle\u015ftirilmi\u015f CSV \u00e7\u0131kt\u0131s\u0131:\n\/\/ 'name','email'\n\/\/ 'Ay\u015fe','ayse@example.com'\n\/\/ 'Fatma','fatma@example.com'\n<\/code><\/pre>\n<h3>Veri D\u00f6n\u00fc\u015ft\u00fcrme ve Hata Y\u00f6netimi<\/h3>\n<p><code>node-csv<\/code> k\u00fct\u00fcphanesi, okuma ve yazma i\u015flemleri aras\u0131nda veriyi d\u00f6n\u00fc\u015ft\u00fcrme ve olas\u0131 hatalar\u0131 y\u00f6netme konusunda da g\u00fc\u00e7l\u00fc mekanizmalar sunar.<\/p>\n<h4>Veri D\u00f6n\u00fc\u015ft\u00fcrme (stream-transform)<\/h4>\n<p><code>node-csv<\/code>&#8216;nin <code>stream-transform<\/code> mod\u00fcl\u00fc, okunan veriyi yazmadan \u00f6nce de\u011fi\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Bu, verileri temizlemek, formatlamak veya zenginle\u015ftirmek i\u00e7in idealdir.<\/p>\n<p><code>transform.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m. Bu \u00f6rnekte <code>input.csv<\/code> dosyas\u0131ndaki verileri okuyup, <code>fiyat<\/code> s\u00fctununu KDV ekleyerek <code>output_transformed.csv<\/code> dosyas\u0131na yazaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-javascript\">const fs = require('fs');\nconst { parse } = require('csv-parse');\nconst { transform } = require('stream-transform');\nconst { stringify } = require('csv-stringify');\n\n\/\/ input.csv dosyas\u0131n\u0131 okuma ak\u0131\u015f\u0131\nconst readStream = fs.createReadStream('.\/input.csv');\n\/\/ output_transformed.csv dosyas\u0131na yazma ak\u0131\u015f\u0131\nconst writeStream = fs.createWriteStream('.\/output_transformed.csv');\n\n\/\/ CSV ayr\u0131\u015ft\u0131r\u0131c\u0131 (parser)\nconst parser = parse({\n  columns: true,\n  delimiter: ','\n});\n\n\/\/ Veri d\u00f6n\u00fc\u015ft\u00fcrme (transformer)\nconst transformer = transform((record, callback) => {\n  \/\/ Her kay\u0131t i\u00e7in bu fonksiyon \u00e7al\u0131\u015f\u0131r\n  const originalPrice = parseFloat(record.fiyat);\n  const priceWithKdv = (originalPrice * 1.18).toFixed(2); \/\/ %18 KDV ekle\n  record.fiyat = priceWithKdv; \/\/ Fiyat\u0131 g\u00fcncelle\n  record.kdvli_fiyat = priceWithKdv; \/\/ Yeni bir s\u00fctun ekleyebiliriz\n  callback(null, record); \/\/ D\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f kayd\u0131 geri d\u00f6nd\u00fcr\n}, { parallel: 10 }); \/\/ Paralel i\u015fleme say\u0131s\u0131\n\n\/\/ CSV olu\u015fturucu (stringifier)\nconst stringifier = stringify({\n  header: true,\n  columns: ['urun_kodu', 'urun_adi', 'fiyat', 'kdvli_fiyat'] \/\/ S\u00fctun s\u0131ras\u0131n\u0131 belirle\n});\n\n\/\/ Ak\u0131\u015flar\u0131 birbirine ba\u011fla: Oku -> Ayr\u0131\u015ft\u0131r -> D\u00f6n\u00fc\u015ft\u00fcr -> Olu\u015ftur -> Yaz\nreadStream\n  .pipe(parser)\n  .pipe(transformer)\n  .pipe(stringifier)\n  .pipe(writeStream)\n  .on('finish', () => {\n    console.log('Veri d\u00f6n\u00fc\u015ft\u00fcrme ve yazma i\u015flemi tamamland\u0131: output_transformed.csv');\n  })\n  .on('error', (err) => {\n    console.error('Ak\u0131\u015f hatas\u0131:', err.message);\n  });\n<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>input.csv<\/code> dosyas\u0131ndaki \u00fcr\u00fcn fiyatlar\u0131na %18 KDV ekleyip, yeni bir <code>kdvli_fiyat<\/code> s\u00fctunuyla <code>output_transformed.csv<\/code> dosyas\u0131na yazd\u0131k. <code>stream-transform<\/code> mod\u00fcl\u00fc, ak\u0131\u015flar aras\u0131nda esnek veri manip\u00fclasyonu sa\u011flar.<\/p>\n<h4>Hata Y\u00f6netimi<\/h4>\n<p>Ak\u0131\u015f tabanl\u0131 i\u015flemlerde hata y\u00f6netimi kritiktir. Node.js ak\u0131\u015flar\u0131, <code>error<\/code> olay\u0131n\u0131 tetikleyerek hatalar\u0131 bildirir. Bu olaylar\u0131 dinleyerek hatalar\u0131 yakalayabilir ve uygulaman\u0131z\u0131n \u00e7\u00f6kmesini engelleyebilirsiniz.<\/p>\n<p>Yukar\u0131daki <code>read_stream.js<\/code> \u00f6rne\u011findeki gibi, <code>on('error', (err) => { ... })<\/code> kal\u0131b\u0131n\u0131 kullanarak t\u00fcm ak\u0131\u015flarda hata y\u00f6netimi yapman\u0131z \u00f6nemlidir. \u00d6rne\u011fin, dosya okuma hatas\u0131, ge\u00e7ersiz CSV format\u0131 gibi durumlar bu \u015fekilde ele al\u0131nabilir.<\/p>\n<pre><code class=\"language-javascript\">const fs = require('fs');\nconst { parse } = require('csv-parse');\n\nconst parser = parse({ columns: true });\n\nfs.createReadStream('.\/non_existent_file.csv') \/\/ Mevcut olmayan bir dosya\n  .pipe(parser)\n  .on('data', (record) => {\n    console.log(record);\n  })\n  .on('end', () => {\n    console.log('Okuma tamamland\u0131.');\n  })\n  .on('error', (err) => {\n    \/\/ Dosya bulunamad\u0131\u011f\u0131nda bu hata yakalan\u0131r\n    console.error('Ak\u0131\u015f hatas\u0131:', err.message);\n    if (err.code === 'ENOENT') {\n      console.error('Belirtilen dosya bulunamad\u0131.');\n    }\n  });\n\n\/\/ Ge\u00e7ersiz CSV format\u0131 (\u00f6rne\u011fin, t\u0131rnak i\u015faretleri e\u015fle\u015fmiyor)\nconst malformedCsv = <code>\"id\",\"name\n1,\"Alice\"<\/code>;\n\nparse(malformedCsv, { columns: true }, (err, records) => {\n  if (err) {\n    console.error('Ge\u00e7ersiz CSV ayr\u0131\u015ft\u0131rma hatas\u0131:', err.message);\n    return;\n  }\n  console.log(records);\n});\n<\/code><\/pre>\n<p>Callback tabanl\u0131 i\u015flemlerde ise, callback fonksiyonuna gelen ilk arg\u00fcman (<code>err<\/code>) hata objesini i\u00e7erir ve bu arg\u00fcman\u0131 kontrol ederek hatalar\u0131 y\u00f6netebilirsiniz.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Bu rehberde, Node.js ortam\u0131nda <code>node-csv<\/code> k\u00fct\u00fcphanesini kullanarak CSV dosyalar\u0131n\u0131 nas\u0131l okuyup yazaca\u011f\u0131n\u0131z\u0131 detayl\u0131 bir \u015fekilde \u00f6\u011frendiniz. <code>node-csv<\/code>&#8216;nin mod\u00fcler yap\u0131s\u0131 ve ak\u0131\u015f tabanl\u0131 yakla\u015f\u0131m\u0131 sayesinde, k\u00fc\u00e7\u00fck veri par\u00e7ac\u0131klar\u0131ndan gigabaytlarca b\u00fcy\u00fckl\u00fckteki dosyalara kadar her t\u00fcrl\u00fc CSV i\u015fleme ihtiyac\u0131n\u0131z i\u00e7in performansl\u0131 ve esnek \u00e7\u00f6z\u00fcmler geli\u015ftirebilirsiniz. \u00d6zellikle b\u00fcy\u00fck dosyalarla \u00e7al\u0131\u015f\u0131rken ak\u0131\u015flar\u0131n kullan\u0131lmas\u0131, uygulaman\u0131z\u0131n bellek verimlili\u011fi ve genel performans\u0131 a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>node-csv neden di\u011fer CSV k\u00fct\u00fcphanelerinden daha iyi?<\/strong><br \/>\n<code>node-csv<\/code>, ak\u0131\u015f tabanl\u0131 yap\u0131s\u0131yla \u00f6ne \u00e7\u0131kar. Bu, \u00e7ok b\u00fcy\u00fck CSV dosyalar\u0131n\u0131 bile belle\u011fe y\u00fcklemeden, par\u00e7a par\u00e7a i\u015fleyebilme yetene\u011fi sa\u011flar. Ayr\u0131ca mod\u00fcler yap\u0131s\u0131 (parse, stringify, transform), sadece ihtiyac\u0131n\u0131z olan i\u015flevselli\u011fi kullanman\u0131za olanak tan\u0131r ve genel olarak y\u00fcksek performans sunar.<\/p>\n<p><strong>\u00c7ok b\u00fcy\u00fck CSV dosyalar\u0131yla nas\u0131l ba\u015fa \u00e7\u0131k\u0131l\u0131r?<\/strong><br \/>\nAk\u0131\u015f (stream) tabanl\u0131 y\u00f6ntemleri kullanmal\u0131s\u0131n\u0131z. <code>fs.createReadStream<\/code> ile dosyay\u0131 okuma ak\u0131\u015f\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcp, <code>csv-parse<\/code>&#8216;a y\u00f6nlendirerek bellekteki y\u00fck\u00fc minimumda tutabilirsiniz. Ayn\u0131 \u015fekilde, yazma i\u015flemlerinde <code>csv-stringify<\/code>&#8216;\u0131 <code>fs.createWriteStream<\/code> ile birlikte kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p><strong>CSV dosyas\u0131nda farkl\u0131 ay\u0131r\u0131c\u0131lar (delimiter) varsa ne yapmal\u0131y\u0131m?<\/strong><br \/>\n<code>parse<\/code> ve <code>stringify<\/code> fonksiyonlar\u0131n\u0131n <code>delimiter<\/code> se\u00e7ene\u011fini kullanarak virg\u00fcl (<code>,<\/code>) d\u0131\u015f\u0131ndaki ay\u0131r\u0131c\u0131lar\u0131 (\u00f6rne\u011fin noktal\u0131 virg\u00fcl (<code>;<\/code>), tab (<code>\\t<\/code>)) belirtebilirsiniz.<\/p>\n<p><strong>T\u00fcrk\u00e7e karakter (UTF-8) deste\u011fi var m\u0131?<\/strong><br \/>\nEvet, Node.js ve <code>node-csv<\/code> varsay\u0131lan olarak UTF-8 kodlamas\u0131n\u0131 destekler. Dosyalar\u0131n\u0131z UTF-8 olarak kaydedildi\u011fi s\u00fcrece T\u00fcrk\u00e7e karakterlerle ilgili herhangi bir sorun ya\u015famazs\u0131n\u0131z. Ancak, farkl\u0131 bir kodlamayla kaydedilmi\u015f bir dosya okuyorsan\u0131z, <code>fs.createReadStream<\/code> i\u00e7inde <code>encoding<\/code> se\u00e7ene\u011fini ayarlaman\u0131z gerekebilir (\u00f6rne\u011fin, <code>fs.createReadStream('file.csv', { encoding: 'latin1' })<\/code>).<\/p>\n<p><strong>CSV i\u00e7inde t\u0131rnak i\u015faretleri veya \u00f6zel karakterler varsa nas\u0131l i\u015flenir?<\/strong><br \/>\n<code>node-csv<\/code> k\u00fct\u00fcphanesi, CSV standartlar\u0131na uygun olarak t\u0131rnak i\u015faretleri (<code>quote<\/code>) ve ka\u00e7\u0131\u015f karakterleri (<code>escape<\/code>) ile \u00f6zel karakterleri otomatik olarak i\u015fler. E\u011fer bir alan\u0131n i\u00e7inde ay\u0131r\u0131c\u0131 karakter veya t\u0131rnak i\u015fareti varsa, bu alan otomatik olarak t\u0131rnak i\u00e7ine al\u0131n\u0131r ve i\u00e7indeki t\u0131rnak i\u015faretleri ka\u00e7\u0131\u015f karakteriyle (<code>\"\"<\/code> veya <code>\\\"<\/code>) i\u015flenir. Bu davran\u0131\u015f <code>quote<\/code> ve <code>escape<\/code> se\u00e7enekleriyle \u00f6zelle\u015ftirilebilir.<\/p>\n<p>Umar\u0131z bu kapsaml\u0131 rehber, Node.js projelerinizde CSV dosyalar\u0131yla \u00e7al\u0131\u015f\u0131rken size yard\u0131mc\u0131 olur!<\/p>\n","protected":false},"excerpt":{"rendered":"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma\nCSV (Comma Separated Values) dosyalar\u0131, verilerin basit ve ta\u015f\u0131nabilir bir forma","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[136],"tags":[],"class_list":{"0":"post-30894","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-node-js","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Node.js&#039;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js&#039;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma\" \/>\n<meta property=\"og:description\" content=\"Node.js&#039;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma CSV (Comma Separated Values) dosyalar\u0131, verilerin basit ve ta\u015f\u0131nabilir bir forma\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-03T02:41:58+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma\",\"datePublished\":\"2025-10-03T02:41:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\"},\"wordCount\":1651,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Node.js\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\",\"name\":\"Node.js'te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-03T02:41:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js'te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js'te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma","og_description":"Node.js'te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma CSV (Comma Separated Values) dosyalar\u0131, verilerin basit ve ta\u015f\u0131nabilir bir forma","og_url":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-03T02:41:58+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma","datePublished":"2025-10-03T02:41:58+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/"},"wordCount":1651,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Node.js"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/","url":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/","name":"Node.js'te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-03T02:41:58+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-jste-csv-dosyalarini-node-csv-kullanarak-okuma-ve-yazma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js&#8217;te CSV Dosyalar\u0131n\u0131 Node-CSV Kullanarak Okuma ve Yazma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30894"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30894\/revisions"}],"predecessor-version":[{"id":30895,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30894\/revisions\/30895"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}