merhaba arkadaşlar elimde 500 mb boyutunda bir XML dosyası var bunu küçük parçalara bölmem lazım nasıl yapabilrim daha önce yapan oldu mu ?
Phyton ile yapanlar var ama Phyton bilgim hiç yok konu hakkında bilgisi olan var mı acaba ?
XML bölme işlemi
3
●582
- 25-09-2019, 14:28:26Golang'le cok hizli bi sekilde parse edip chunklayip dosya olarak olusturabilirsiniz. Parse islemi icin ornek;Orgeneral adlı üyeden alıntı: mesajı görüntüle
https://jm33.me/parsing-large-xml-with-go.html - 25-09-2019, 14:32:30https://stackoverflow.com/questions/...llers-with-php
Bu adreste bir kaç farklı yoldan bahsedilmiş hocam. - 29-09-2019, 20:28:31c# ile yapmak için kısa bir kod yazmıştım zamanında , az değiştirdim. buna benzer şekilde parçalayabilirsiniz.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace SADtest { class Program { const string kaynakDosya = "C:denemebig.xml"; const string dizinHedef = "C:deneme"; const int dosyaBytes = 5242880; // 5 MB const int sinirBytes = 10485760; // 10 MB static int dosyaID = 0; static StringBuilder sb = new StringBuilder(); static void Main(string[] args) { xmlParcala(); } static void xmlParcala() { if (!File.Exists(kaynakDosya)) { throw new FileNotFoundException($"{kaynakDosya} dosyası yok!"); } using (StreamReader sr = new StreamReader(kaynakDosya, Encoding.UTF8)) { while (!sr.EndOfStream) { // her seferinde 1 satır oku string satir = sr.ReadLine(); if (string.IsNullOrEmpty(satir)) { continue; } // yazılacak dosya 5 mb olana kadar doldur sb.AppendLine(satir); // dosya 5 mb eşiğine ulaşır veya geçerse if (sb.Length >= dosyaBytes) { // 5 mb oldu artık dosyayı kayıt edebiliriz. // burda xml olduğu için çeşitli node kontrolleri yapılması gerekebilir. // çünkü kesmenin doğru yerden yapılması gerekir. // örneğe göre bu satırda aradığımız node şu şekilde bitiyorsa dosyayı kayıt edecek. if (satir.EndsWith("</bitisnodesi>", StringComparison.Ordinal)) { // 5 mb lık dosyayı yaz. xmlYaz(); } else if (sb.Length >= sinirBytes) { // 5mb oldu ancak bizim aradığımı kesilecek node henüz bulunamadı. // döngü sürdükçe tampona atmaya devam edecek bu da tamponu büyütecek // bunun önüne geçmek için sinirBytes ile 10 mb sınır verdik. // burda dilerseniz bir Exception fırlatarak işlemi kesebilirsiniz. throw new Exception("Max. sınıra ulaşıldı ancak node hala yok!"); } } } // tamponda kalan varsa ayrı bir dosyaya yaz if (sb.Length > 0) { // 5 mb lık dosyayı yaz. xmlYaz(); } } } static void xmlYaz() { // eşsiz bir xml dosyası yazılacak ve tampon sıfırlanacak. dosyaID++; string fullPath = $"{dizinHedef}{dosyaID}.xml"; File.WriteAllText(fullPath, sb.ToString()); sb = new StringBuilder(); } } }