আরকজিআইএস 10-তে পাইথন স্ক্রিপ্টটি পরিচালনা করার সময় ত্রুটি


10

আমার একটি পাইথন স্ক্রিপ্ট রয়েছে যা আমি আমাদের প্রকল্প ফোল্ডারে সমস্ত এমএক্সডি ফাইলের (সম্পূর্ণ পথ সহ) একটি তালিকা তৈরি করতে ব্যবহার করছি। এরপরে স্ক্রিপ্টটি তালিকাটির মধ্য দিয়ে পুনরাবৃত্তি করতে এবং প্রতিটি এমএক্সডি তে কীভাবে কীভাবে করা যায় তার জন্য ফাইন্ডআরপ্লেস ওয়ার্কস্পেসপথগুলি ব্যবহার করে। আমি যখন একটি দূষিত এমএক্সডি ফাইল হিট করেছি তখন আমি সমস্যায় পড়ছি। তারা চেষ্টা করেছে / ব্যতীত এবং এটি কাজ করতে পারেনি। আদর্শ পরিস্থিতিটি হ'ল কোনও ফাইলকে দূষিত ফাইলের নাম লিখতে হবে এবং এগিয়ে যেতে হবে যাতে আমি শেষে তাদের কাছে ফিরে আসতে পারি। আমি পাইথন স্ক্রিপ্টিং নিয়ে খুব নতুন, যে কোনও সাহায্যের প্রশংসা করা হবে।

import arcpy, os, sys, traceback, time

oldpath = 'W:'
newpath = 'W:\\GIS'

def find(path,pattern):
    matches = []
    for r,d,f in os.walk(path):
        for files in f:
            if files.endswith(pattern):
                fpath = os.path.join(r,files)
                matches.append(fpath)
                print (fpath)
    return matches


print ("Go: ")
mxdlist = (find('C:\\gis','.mxd'))
print (mxdlist)


print ("Starting Path Conversion")
try:
        for mxdold in mxdlist:
            mxd = arcpy.mapping.MapDocument(mxdold)
            mxd.findAndReplaceWorkspacePaths(oldpath, newpath)
            time.sleep(6)
            mxd.save()
            time.sleep(6)
            print (mxdold)
            del mxd
    except arcpy.ExecuteError:    
        arcpy.AddError(arcpy.GetMessages(2))    

    except:    
        arcpy.AddError("Non-tool error occurred")

উত্তর:


7

প্রথম কাজটি হ'ল স্টেটমেন্টের forবাইরে আপনার লুপের শীর্ষটি আনা trytryবিবৃতিটি আপনার অপারেশনকে মেরে ফেলার সুযোগ দেওয়ার আগে আপনি আপনার পুনরাবৃত্তিতে প্রবেশ করতে চান । এরপরে আপনি একটি ত্রুটি লগ খুলতে এবং দূষিত ফাইলগুলির ফাইলের নাম লিখতে কয়েকটি লাইন যুক্ত করতে চান।

import arcpy, os, sys, traceback, time

oldpath = 'W:\\'
newpath = 'W:\\GIS'
cgis_dir = 'C:\\gis'

mxdlist = []

print 'Go: '
files = os.listdir(cgis_dir)
for file in files:
    try:
        if file.split('.')[1] == 'mxd':
            mxdlist.append(file)
            print cgis_dir,file
    except:
        pass


print ("Starting Path Conversion")

for mxdold in mxdlist:
    try:
        mxd = arcpy.mapping.MapDocument(mxdold)
        mxd.findAndReplaceWorkspacePaths(oldpath, newpath)
        time.sleep(6)
        mxd.save()
        time.sleep(6)
        print (mxdold)
        del mxd
    except arcpy.ExecuteError:    
        arcpy.AddError(arcpy.GetMessages(2))
        f=open(r'W:\GIS\error.log','a')
        f.write(mxdold,'\n')
        f.close()

    except:    
        arcpy.AddError("Non-tool error occurred")

2
+1 খুব ভাল, আমাকে এটি মার! তবে, 'w'(rite) দিয়ে লগ ফাইলটি খুলবেন না - 'a'পরিবর্তে (ppend) ব্যবহার করুন যেন একাধিক দূষিত এমএক্সডি আপনি প্রতিবার ওভাররাইট করে। এছাড়াও, এটি ওভারকিল হতে পারে তবে পাইথন loggingমডিউলটি ত্রুটিগুলি রেকর্ড করার জন্য উপযুক্ত হতে পারে।
om_henners

ভাল ধরা ... ফাইল 'a'সংযোজন সহ ফাইল খুলতে কোড স্থির করে ।
জেসন

এটি এখনও পরিবর্তিত কোড সহ ব্যর্থ হচ্ছে। আমি যাচাই করেছি যে ফাইলগুলি দুর্নীতিগ্রস্থ নয় তবে আমি এটি পেয়েছি যেখানে উইন্ডোজ 7 দাবি করেছে যে এটি স্ক্রিপ্টটি ঝুলিয়ে দিয়েছে এবং হত্যা করেছে। কোন ধারনা?
বওয়ারিংটন

আপনি কী ত্রুটি পাচ্ছেন? আপনি কি বাকি কোডটি পোস্ট করতে পারবেন?
জেসন

1
আমার কাছে 2 টি পরামর্শ রয়েছে: 1. লগিং এবং লগ ফাইলগুলিতে পুনরায় উদ্ভাবন করবেন না। আমার সাথে অ্যাজিলিজ.নেট / ব্লগ / ৮৩২ / পয়থন-ব্লগিংয়ে পাইথন লগিংয়ের জন্য একটি সামান্য পাইগ আছে যাতে অন্যান্য ভাল লিঙ্ক রয়েছে। ২.আর্কি-তে কলটি খালি করার কথা বিবেচনা করুন rআডরকে যুক্ত করুন যেহেতু আপনি নিজের হ্যান্ডলার ক্রিয়াটি লিখছেন।
সাগিলি

3

দুর্নীতিগ্রস্থ এমএক্সডিগুলিতে আপনার ত্রুটির সাথে এর কোনও যোগসূত্র নেই, তবে যেহেতু আপনি লগ ইন করতে চাইছেন, loggingমডিউলটি (@ ওমেনার্সের পরামর্শ অনুসারে ) পাইথন ডক্স থেকে বেশ কিছুটা সোজা এখানে দেওয়া হয়েছে । উপরের সিসিলি মন্তব্যগুলি দেখতে দুর্দান্ত দেখায়।

import logging
import datetime
import os

date_tag = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
log_file = os.path.join(os.path.dirname(os.curdir), "LogFileTest_%s.log" % date_tag)

# Setup logger
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(levelname)-8s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    filename=log_file,
                    filemode='w')
logging.info(': START LOGGING')

try:
    logging.info(": Do something here")
except Exception, err:
    logging.error(": %s" % str(err))

যখন হিসাবে চলমান হয়, এটি দেয়:

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.