আর্কপাইতে শেফফাইলের আকার পুনরুদ্ধার করছেন?


10

পাইথন এবং আরকিপি ব্যবহার করে কোনও শেফফাইলের আকারটি পাওয়া সম্ভব? যদি তাই হয়, কিভাবে?


2
আপনি কি বৈশিষ্ট্যের পরিমাণ বলতে চান? আচ্ছাদিত এলাকা? শারীরিক ফাইলের আকার?
মেরিবেথ


হ্যাঁ, শারীরিক ফাইলের আকার। দুঃখিত। আপনাকে ধন্যবাদ @ জেন
জন

@ জেন আর একটি নির্বোধ প্রশ্ন। os.path.getsize () একটি পূর্ণসংখ্যা ফেরত দেয়। কেবি এর ডিফল্ট হয়?
জন

1
1 কেবি = 1024 বাইট, কিলোবাইট পেতে 1024 দ্বারা বাইট ভাগ করুন (বা কিবিবাইট ছিল, কেবল জিনিসগুলিকে বিভ্রান্ত করার জন্য)। তেমনি এমবিতে (এমআইবি) 1024 কেবি রয়েছে, 1 জিবিতে 1024 এমবি (জিআইবি) রয়েছে। নোট করুন যে শেপের আকারটি সমস্ত শেবাফিলের নয়, সেখানে ডিবিএফ, এসএইচএক্স অন্তত এবং আরও অনেক কিছু হতে বাধ্য - আপনার ডিস্কে সত্যিকারের আকারটি অর্জন করতে এই ফাইলগুলি যুক্ত করা উচিত ।
মাইকেল সিলিমসন

উত্তর:


14

বৈধ শেফফিল এক্সটেনশান সহ শেফফিল ডিরেক্টরিতে সমস্ত ফাইলের মধ্য দিয়ে আইট্রেট করুন এবং তাদের আকারগুলি একসাথে যুক্ত করুন। osমডিউল এই কাজের জন্য সহায়ক। এখানে একটি ফাংশন যা বাইটগুলিতে একটি ইনপুট শেফফিলের সাথে যুক্ত সমস্ত শেপফিল ফাইলের আকার দেয়। আপনার ইনপুট হিসাবে শেফফিলের পুরো পথটি ব্যবহার করুন।

import os

def ShpSize (inShp):
    #standardize lowercase
    inShp = inShp.lower ()
    #shapefile extensions
    extensions = [".shp",
                  ".shx",
                  ".dbf",
                  ".sbn",
                  ".sbx",
                  ".fbn",
                  ".fbx",
                  ".ain",
                  ".aih",
                  ".atx",
                  ".ixs",
                  ".mxs",
                  ".prj",
                  ".xml",
                  ".cpg"]

    #shape file name without directory
    shpName = os.path.basename (inShp)
    #shape file name without .shp extension
    shpFlName = os.path.splitext(shpName)[0]

    #size set to zero
    size = 0
    #directory of shapefile
    shpDir = os.path.dirname (inShp)
    #iterate directory files
    for fl in os.listdir (shpDir):
        #standardize lowercase
        fl = fl.lower ()
        #skip file names that don't match shapefile
        flName = os.path.splitext(fl)[0]
        if not flName == shpFlName:
            #special case: .shp.xml file
            if not fl == shpFlName + ".shp.xml":
                continue
        #skip file names without proper extension
        ext = os.path.splitext(fl)[1]
        if not ext in extensions:
            continue
        #get size
        flFullPath = os.path.join (shpDir, fl)
        size += os.path.getsize (flFullPath)

    return size

6
এতে সমস্ত ফাইল তালিকাভুক্ত করার পরিবর্তে shpDir, আপনি glob.glob(shpFlName + "*")কেবল সেই ফাইলগুলি ফিরতে ব্যবহার করতে পারেন যা একই বেসনেম রয়েছে। তারপরে এটি বৈধ এক্সটেনশনে কেবল একটি ফিল্টার।
পল

এটি সত্য @ পল, গ্লোব সত্যই কার্যকর তবে এমিলসের সমাধানটি দেশীয় অজগর এবং একেবারে সঠিক। গ্লোব পদ্ধতিটি কেবলমাত্র একটি পার্শ্ব নোট হওয়া উচিত যেমন নির্দিষ্ট পরিস্থিতিতে ব্যবহারকারীরা কেবল তৃতীয় পক্ষের সফ্টওয়্যার ইনস্টল করতে পারবেন না .. আমি কেবলমাত্র একটি উত্তরই সমর্থন করব যার জন্য তৃতীয় পক্ষের ইনস্টলেশন প্রয়োজন যদি না করার কোন व्यवहारীয় (বা বাস্তববাদী) উপায় থাকে এটা দেশীয় অজগর।
মাইকেল সিলিমসন

@ মাইকেলমাইলস-সিমসন globহ্যাঁ, স্থানীয়?
এমিল ব্রুঞ্জেজ

আমি এটি মনে করি না, এটি পেয়েছি এবং এটি প্রায়শই ব্যবহার করি তবে আমি এটি ডাউনলোড করতে হবে তা আমি নিশ্চিত আছি .. পাইওয়িন 32 এর আগে একটি নতুন ইনস্টলেশনের জন্য আমার প্রয়োজনীয় প্লাগিনগুলির তালিকায় এটি রেখেছি। এটি এমনও হতে পারে যে পরবর্তী সংস্করণগুলি বান্ডিল হয়ে আসবে, নাম্বার মতো, এটিও বোধগম্য হবে। গ্লোব আছে কিনা তা দেখার জন্য আমি কোনও কাঁচা ইনস্টল অ্যাক্সেস করতে পারছি না, ইনস্টল করার জন্য তালিকায় রেখে দিয়েছি এটি সর্বদা রয়েছে; অজগরটির একটি নতুন / কাঁচা ইনস্টল সহ সম্ভবত কেউ তা প্রমাণ করতে পারে।
মাইকেল সিসটেমসন

1
@ মাইকেলমাইলস- সিমিটসন - গ্লোব স্ট্যান্ডার্ড পাইথন লাইব্রেরিতে রয়েছে - ডকস.পাইথন.আর / ২ / লাইব্রেরি / গ্লোব এইচটিএমএল এবং খুব দীর্ঘ সময়ের জন্য রয়েছে
ইউজার ২৮6

2

আপনি দক্ষতার সাথে শেফফাইল আকার (যেমন সমস্ত সম্পর্কিত ফাইল সহ) খুঁজে পেতে একটি জেনারেটর এক্সপ্রেশন ব্যবহার করতে পারেন। নিম্নলিখিত পদ্ধতিটিতে পাইথন অন্তর্নির্মিত 2.7 কার্যকারিতা ব্যবহার করে।

import os, glob

ws = r'C:\path\to\your\shapefiles'  # input workspace

shapefiles = glob.glob(os.path.join(ws, "*.shp")) # List all .shp files

for shapefile in shapefiles:
    s = sum([os.stat(x).st_size for x in glob.glob(shapefile.split(".")[0] + "*")])
    print "The file size for %s is %s bytes or %s kb" % (shapefile, s, (float(s)/1000))

জেনারেটর এক্সপ্রেশন নিম্নলিখিতটি করে:

  1. একটি শেফফিলের সাথে সম্পর্কিত সমস্ত ফাইলের তালিকা করুন। এই ক্ষেত্রে, পথ থেকে ".shp" এক্সটেনশনটি সরিয়ে ফেলা এবং সম্পর্কিত ফাইলগুলির তালিকা তৈরির জন্য globপথ এবং ওয়াইল্ডকার্ড *ব্যবহার করুন
  2. বাইট ব্যবহার করে ফাইলের আকার পান os.stat
  3. জেনারেটর ব্যবহার করে তাদের যোগ করুন sum([...])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.