নির্দিষ্ট এক্সটেনশন সহ সমস্ত ফাইলের তালিকা করতে আর ব্যবহার করে


137

আমি আর এ খুব নতুন এবং আরজিজিআইএস ব্যবহার করে তৈরি করা .dbf টেবিলগুলির একটি সিরিজটি পুনরাবৃত্তি করার জন্য একটি আর স্ক্রিপ্ট আপডেট করার কাজ করছি এবং গ্রাফের একটি সিরিজ উত্পাদন করব।

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

files <- list.files(pattern = "dbf")

কেউ কি আমাকে কিছু দিকনির্দেশনা দিতে পারেন?


1
আপনি যদি রেজিক্স্পসের সাথে লড়াই করছেন তবে ওয়াইল্ডকার্ড-প্যাটার্নটি জানেন তবে ফাংশনটি glob2rx()প্রায়শই সহায়ক।
কারাকাল

এটি কি কেবল আমার বা শিরোনামটি বিভ্রান্তিমূলক: "কেবলমাত্র একটি নির্দিষ্ট এক্সটেনশান সহ" পড়তে হবে (তবে এসএসএর কোনও নির্দিষ্ট এক্সটেনশন বাদ দিয়ে আমি কোনও উত্তর খুঁজে পাই না)
জে উইন।

কারাকাল, পরামর্শের জন্য ধন্যবাদ। jonw, আমি মনে করি আমি এটি আরও সংক্ষেপে বলতে পারি, আমি কেবল একটি সভার আগে পোস্ট করার চেষ্টা করছিলাম।
চকিনস

এটি আমার দৃষ্টি আকর্ষণ করেছে কারণ আমি রেজিএক্সএক্স সম্পর্কে জানতে পেরে আমি ভাবছিলাম যে বাদ দেওয়ার কোনও সহজ উপায় আছে কিনা। সম্ভবত একটি পৃথক প্রশ্ন প্রাপ্য।
জে উইন

উত্তর:


198
files <- list.files(pattern = "\\.dbf$")

$শেষে মানে এই যে স্ট্রিং এর শেষ। "dbf$"খুব কার্যকর হবে, তবে যুক্ত করা \\.( .নিয়মিত এক্সপ্রেশনগুলির মধ্যে একটি বিশেষ চরিত্র যাতে আপনাকে এড়াতে হবে) নিশ্চিত করুন যে আপনি কেবলমাত্র ফাইলের সাথে এক্সটেনশনের সাথে মিল রেখেছেন .dbf(ক্ষেত্রে যেমন আপনার কাছে .adbfফাইল রয়েছে)।


1
এটা কি সংবেদনশীল?
এনএসএন

6
@nsn হ্যাঁ, তবে আপনি যদি অন্যথায় চান তবে ignore.caseফাংশনটির পক্ষে যুক্তিও রয়েছে, তাই list.files(pattern = "\\.dbf$", ignore.case=TRUE)। এবং ?list.filesআরও বিশদে এই ফাংশনটির জন্য সহায়তা পৃষ্ঠাটি দেখুন ( )।
মারেক 18

61

নিয়মিত ভাবের পরিবর্তে গ্লোব ব্যবহার করে যা এটি ব্যবহার করে দেখুন যাতে এটি কেবলমাত্র ফাইলের নামগুলি শেষ করে যা শেষ হয় .dbf

filenames <- Sys.glob("*.dbf")

12

অক্ষরটি "\\.dbf"ব্যবহার করে স্ট্রিংয়ের শেষে সন্ধানের জন্য প্যাটার্নটি পেগ করুন $:

list.files(pattern = "\\.dbf$")

1
যদি ডট অর্থ ফাইল এক্সটেনশান থেকে ডট হয় এটি কাজ করবে না। নিয়মিত অভিব্যক্তিতে বিন্দু একক অক্ষর মেলে।
মারেক

@ মারেক এটি সবেমাত্র লক্ষ্য করেছেন। আমার ক্যাফিনের মজুদগুলি অবশ্যই একটি প্রান্তিকের নীচে নেমে গেছে।
গ্যাভিন সিম্পসন

হুম যোগ করা উচিত ছিল যে \` escape the .` এখন। সুতরাং কেউ আশ্চর্য হয় যে কেন এটি নিম্নমানের হয়েছিল?
গ্যাভিন সিম্পসন

8

পরিশীলিত নিয়মিত এক্সপ্রেশন ব্যবহার করার ক্ষেত্রে আমি খুব ভাল নই, তাই আমি নিম্নলিখিত পদ্ধতিতে এই ধরনের কাজটি করতাম:

files <- list.files()
dbf.files <- files[-grep(".xml", files, fixed=T)]

প্রথম লাইনটি সক্রিয়ভাবে কাজ থেকে সমস্ত ফাইল তালিকাভুক্ত করে। দ্বিতীয়টি ".xML" সম্বলিত সমস্ত কিছু ফেলে দেয় (গ্রেপ 'ফাইলগুলি ভেক্টরগুলিতে এই জাতীয় স্ট্রিং সূচকগুলি প্রদান করে; নেতিবাচক সূচকগুলির সাথে সাবসেট করা ভেক্টর থেকে সংশ্লিষ্ট এন্ট্রিগুলি সরিয়ে দেয়)। গ্রেপ ফাংশনটির জন্য "স্থির" যুক্তিটি কেবল আমার ইচ্ছা, কারণ আমি সাধারণত এটি পার্ল-স্টাইলের অভিনব রেজিপক্সার ছাড়াই অপরিশোধিত প্যাটার্ন মিলিয়ে ফর্ম করতে চাই, যা আমার জন্য বিস্মিত হতে পারে।

আমি সচেতন যে এই জাতীয় সমাধানটি আমার শিক্ষার ক্ষেত্রে অসুবিধাগুলি কেবল প্রতিফলিত করে তবে কোনও নবজাতকের পক্ষে এটি দরকারী হতে পারে =) কমপক্ষে এটি সহজ।


1
আপনার -আগে সাইন অপসারণ করা উচিত grep। একটি জিপ ফাইল থেকে নির্দিষ্ট ফাইলগুলি বের করার জন্য আমার এই ধরণের সমাধানের দরকার ছিল। প্রথমে একটি ডাটা.ফ্রেমে ফাইলের তালিকা পান এবং নির্দিষ্ট ফাইলগুলি পান এবং সেগুলি পরে বের করুন। lf <- unzip(file, list=T)[,1]; files.shp <- lf[grep(".shp", lf, fixed=T)]
সেজেন

5

পুরো পথ সহ ফাইলগুলির তালিকা আপনাকে দেয়:

  Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory

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