আরকিপি.লিস্টফিজিচার ক্লাস সহ একাধিক ওয়াইল্ডকার্ড প্যারামিটার ব্যবহার করা হচ্ছে


12

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

FCS = arcpy.ListFeatureClasses("X_*" OR "*_Y")

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


ওয়াইল্ডকার্ড প্যারামিটারটি কেবল ইনপুট হিসাবে একটি স্ট্রিং নেয়, তাই ListFeatureClasses()দ্বিগুণ চালানো সংক্ষিপ্তভাবে (এটি সম্ভবত বৃহত্তর ডিরেক্টরিগুলির জন্য খুব ধীর হতে পারে, কোনও ওয়াইল্ডকার্ড উত্তোলন করা ভাল এবং তারপরে কেবল ফলাফলটি ফিল্টার করা ভাল
পল

পল, নীচের তালিকার বোধগম্যের উত্তরটি ঠিক সেটাই করে - এটি তালিকাটির মধ্য দিয়ে চলে এবং যদি বিবৃতিটির উপর ভিত্তি করে এটি ফিল্টার করে।
dklassen

@ ডক্লাসসেন, ওপিতে এফসি খুঁজছেন যা "_Y" এ শেষ হবে, শুরু হবে না। আপনি এটি কোনও জিডিবির বিপরীতে ওয়াইল্ডকার্ড করতে পারেন, তবে আপনার কোডটি দিয়ে শেফফাইল করেন না।
পল

উত্তর:


16

দুজনকে একসাথে যুক্ত করুন, তারা কেবল তালিকা lists

FCS = arcpy.ListFeatureClasses("X_*") + arcpy.ListFeatureClasses("*_Y")

সদৃশগুলি অপসারণ করতে:

FCS = set(arcpy.ListFeatureClasses("X_*") + arcpy.ListFeatureClasses("*_Y"))

এটিও কাজ করে, ধন্যবাদ @ জেসন শিয়েরার, আরম্ভের সাথে এবং শেষগুলি ব্যবহার করে একটি জিডিবিতে আমার জন্য কাজ করে। আমি যখন কোনও এসডিই নিয়ে কাজ করতে ব্যবহৃত স্ক্রিপ্টটি পরিবর্তন করেছি তখন এটি কোনও কারণে কার্যকর হয়নি। আপনি উল্লিখিত পদ্ধতিটি এসডিইতে কাজ করে।
মান 14

6

আপনি এটি কিছুটা ভিন্নভাবে যোগাযোগ করতে পারেন:

import arcpy
import os

arcpy.env.workspace = 'c:\temp'
fcs = [fc for fc in arcpy.ListFeatureClasses() if fc.startswith('X_') or os.path.splitext(fc)[0].endswith('_Y')]

আপনি জিডিবি না থাকলে এটি সত্যই কাজ করবে না। এক্সটেনশনটি শেফফিলের জন্য ফিরে আসে।
পল

এটি আপনার সেট ওয়ার্কস্পেসের মধ্যে কোনও বৈশিষ্ট্য শ্রেণীর জন্য কাজ করা উচিত। শেফফাইলস সহ - আমরা কেন একটি এক্সটেনশন ফেরত চাইব না?
dklassen

কারণ আপনি শেষের অক্ষরগুলির বিরুদ্ধে এটি দিয়ে ওয়াইল্ডকার্ড করতে পারবেন না - এটি ওপি যা করছে বলে মনে হচ্ছে।
পল

@ পল সংশোধিত - সংশোধন করার জন্য ধন্যবাদ। আমি "_Y" অংশটি দেখিনি।
dklassen

2
কিছুটা নিটপিকি, তবে আপনার ব্যবহার করা উচিত os.path.splitext()। আকারে ফাইলটির একটি সময়কাল থাকতে পারে। +1 টি
পল

1

এই স্ক্রিপ্টগুলি একটি তালিকাতে একাধিক ওয়াইল্ডকার্ড নির্দিষ্ট করে cases[]। পছন্দসই বৈশিষ্ট্য ক্লাসগুলির তালিকা 'আরকিপি.লিস্ট ফিচার ক্লাস ()' এর তুলনায় এটি অনন্য ক্ষেত্রে ছাড়িয়ে যায়। প্রতিটি নির্বাচিত বৈশিষ্ট্য শ্রেণি হ'ল '.extend' ব্যবহার করে বৈশিষ্ট্য শ্রেণীর নতুন তালিকায় যুক্ত

# Create a list of the wildcards 
cases = ["X_*", ""*_Y""]

# Create empty list to store all selected files
fcs= []

# Loop through files to select files following multiple wildcards
for case in cases:
    fc = arcpy.ListFeatureClasses(case)
    # Insert the fc to the list
    fcs.extend(fc)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.