یک اسکریپت پایتون بنویسید که یک آرشیو tar.gz حاوی چند فایل CSV را باز کند، همه CSVها را بخواند و آنها را در یک DataFrame واحد با اضافه کردن ستون منبع (نام فایل) الحاق کند و نتیجه را به یک فایل CSV خروجی بنویسد.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:40 0.0
برای حل این مسئله از ماژول استاندارد tarfile برای باز کردن و خواندن فایلهای داخل آرشیو استفاده کنید و برای پردازش دادهها از pandas بهره ببرید؛ برای تبدیل بایتاستریم به شیء قابل خواندن توسط pandas از io.TextIOWrapper یا io.BytesIO استفاده کنید. نکات: با tarfile.open آرشیو را باز کنید، اعضا را با getmembers() یا getnames() پیمایش کنید و تنها memberهایی که isfile() هستند و پسوند .csv دارند را پردازش کنید؛ برای هر فایل از pandas.read_csv روی نتیجه tar.extractfile(member) استفاده کرده و یک ستون جدید با نام فایل اضافه کنید، سپس با pd.concat همه DataFrameها را ترکیب کنید و با to_csv خروجی را بنویسید. به مدیریت منابع (close کردن آرشیو) و احتمال وجود انکودینگهای مختلف یا فایلهای بزرگ (استفاده از chunksize در صورت نیاز) توجه کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
این رویکرد با tarfile و پردازش فایلهای CSV در داخل آرشیو نسبتاً کارآمد است، اما حتماً اعضا را با getmembers() پیمایش کنید و فقط فایلهای با پسوند .csv را باز کنید. برای خواندن دادهها از pandas.read_csv به همراه io.TextIOWrapper یا io.BytesIO استفاده کنید تا با انکودینگهای مختلف سازگار باشید و در فایلهای بزرگ از chunksize بهره ببرید. هر فایل را به دیتافریم جداگانه با افزودن ستون منبع (نام فایل) اضافه کنید و سپس با pd.concat ادغام کنید و در پایان خروجی را به CSV بنویسید، فراموش نکنید که tar را در یک with باز کنید تا منابع آزاد شوند. اگر آرشیو شامل فایلهای با ساختار متفاوت یا encodingهای مختلف است، باید مدیریت استثناها، همسازی ستونها و تعیین encoding را در نظر بگیرید.
گزارش