পাইথন ব্যবহার করে আমার ফোল্ডারের সর্বশেষ ফাইলটি পাওয়া উচিত। কোডটি ব্যবহার করার সময়:
max(files, key = os.path.getctime)
আমি নীচের ত্রুটি পাচ্ছি:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'
পাইথন ব্যবহার করে আমার ফোল্ডারের সর্বশেষ ফাইলটি পাওয়া উচিত। কোডটি ব্যবহার করার সময়:
max(files, key = os.path.getctime)
আমি নীচের ত্রুটি পাচ্ছি:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'a'
উত্তর:
filesভেরিয়েবলের জন্য যা কিছু বরাদ্দ করা হয়েছে তা ভুল। নিম্নলিখিত কোড ব্যবহার করুন।
import glob
import os
list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getctime)
print latest_file
if os.path.isdir(latest_file):
pathlib.Pathস্ট্রিং এবং ওএস.প্যাথের চেয়ে বেশি অবজেক্টের সাথে কাজ করতে চাই । পাথলিব.পথ অবজেক্টের সাথে আপনার উত্তর হয়ে যায়: list_of_paths = folder_path.glob('*'); latest_path = max(list_of_paths, key=lambda p: p.stat().st_ctime)
os.path.getctimeকী হিসাবে ব্যবহার করতে পারেন এমনকি Pathবস্তুগুলিও।
max(files, key = os.path.getctime)
বেশ অসম্পূর্ণ কোড। কী files? এটি সম্ভবত ফাইলের নামের তালিকা প্রকাশিত হবে os.listdir()।
তবে এই তালিকাটিতে কেবল ফাইলের নাম অংশগুলি (ওরফে "বেসনাম") তালিকাভুক্ত করা হয়েছে কারণ তাদের পথটি সাধারণ। এটি সঠিকভাবে ব্যবহার করতে, আপনাকে এটির দিকে যাওয়ার পথে (এবং এটি প্রাপ্ত করার জন্য ব্যবহৃত) সাথে একত্রিত করতে হবে।
যেমন (অরীক্ষিত):
def newest(path):
files = os.listdir(path)
paths = [os.path.join(path, basename) for basename in files]
return max(paths, key=os.path.getctime)
if basename.endswith('.csv')তালিকা বোধগম্য মধ্যে সন্নিবেশ করুন ।
আমি এর glob.iglob()পরিবর্তে ব্যবহার করার পরামর্শ দেব glob.glob()কারণ এটি আরও দক্ষ।
glob.iglob () এমন একটি পুনরাবৃত্তি ফিরিয়ে দিন যা গ্লোব () হিসাবে একই মানগুলি একই সাথে সমস্ত সংরক্ষণ না করে ফল দেয়।
যার অর্থ glob.iglob()আরও দক্ষ হবে।
আমি আমার প্যাটার্নের সাথে মিলিয়ে সর্বশেষতম ফাইলটি খুঁজে পেতে কোডের নীচে ব্যবহার করি:
LatestFile = max(glob.iglob(fileNamePattern),key=os.path.getctime)
দ্রষ্টব্য: maxফাংশনের বিভিন্ন রূপ রয়েছে , সর্বশেষতম ফাইলটি সন্ধান করার ক্ষেত্রে আমরা নীচের বৈকল্পিকটি ব্যবহার করব:
max(iterable, *[, key, default])
যার পুনরাবৃত্তি দরকার তাই আপনার প্রথম পরামিতিটি পুনরাবৃত্ত হওয়া উচিত। সর্বাধিক নাম্বার সন্ধানের ক্ষেত্রে আমরা বিও রূপটি ব্যবহার করতে পারি:max (num1, num2, num3, *args[, key])
max()সাজান পছন্দ। আমার ক্ষেত্রে, key=os.path.basenameফাইলের নামগুলিতে টাইমস্ট্যাম্প থাকার কারণে আমি একটি আলাদা ব্যবহার করেছি।
তৈরির সময় অনুসারে আইটেমগুলি বাছাই করার চেষ্টা করুন। নীচে উদাহরণস্বরূপ একটি ফোল্ডারে ফাইলগুলি বাছাই করে এবং প্রথম উপাদানটি পাওয়া যায় যা সর্বশেষ is
import glob
import os
files_path = os.path.join(folder, '*')
files = sorted(
glob.iglob(files_path), key=os.path.getctime, reverse=True)
print files[0]
আমার মন্তব্য করার খ্যাতি নেই তবে মারলন অ্যাবেইকনস প্রতিক্রিয়া থেকে আমার সময় পাওয়া আমার পক্ষে সঠিক ফলাফল দেয় নি। এমটাইম ব্যবহার করে কৌতুকটি হয়। (কী = os.path.get এম সময়))
import glob
import os
list_of_files = glob.glob('/path/to/folder/*') # * means all if need specific format then *.csv
latest_file = max(list_of_files, key=os.path.getmtime)
print latest_file
আমি এই সমস্যার জন্য দুটি উত্তর পেয়েছি:
পাইথন ওস.পথ.জেটটাইম সর্বাধিক ফিরিয়ে দেয় না ইউনিক্স সিস্টেমে পাইথন - গেটমটাইম () এবং গেটকালটাইম () এর মধ্যে পার্থক্য
(উত্তরের উন্নতির জন্য সম্পাদিত)
প্রথমে get_latest_file একটি ফাংশন সংজ্ঞায়িত করুন
def get_latest_file(path, *paths):
fullpath = os.path.join(path, paths)
...
get_latest_file('example', 'files','randomtext011.*.txt')
আপনি একটি ডাস্ট্রিং ব্যবহার করতে পারেন!
def get_latest_file(path, *paths):
"""Returns the name of the latest (most recent) file
of the joined path(s)"""
fullpath = os.path.join(path, *paths)
যদি আপনি পাইথন 3 ব্যবহার করেন তবে আপনি এর পরিবর্তে ইগলব ব্যবহার করতে পারেন ।
সর্বশেষ ফাইলটির নাম ফেরত দেওয়ার জন্য কোডটি সম্পূর্ণ করুন:
def get_latest_file(path, *paths):
"""Returns the name of the latest (most recent) file
of the joined path(s)"""
fullpath = os.path.join(path, *paths)
files = glob.glob(fullpath) # You may use iglob in Python3
if not files: # I prefer using the negation
return None # because it behaves like a shortcut
latest_file = max(files, key=os.path.getctime)
_, filename = os.path.split(latest_file)
return filename
JuniperAccessLog-standalone-FCL_VPNথেকে অংশটি পেয়েছেন?
আমি উপরের পরামর্শগুলি ব্যবহার করার চেষ্টা করেছি এবং আমার প্রোগ্রামটি ক্র্যাশ হয়েছিল, আমি যে ফাইলটি সনাক্ত করতে চাইছিলাম তা ব্যবহার করার পরে এবং 'os.path.getctime' ব্যবহার করার সময় এটি ক্র্যাশ হয়েছিল than অবশেষে আমার জন্য যা কাজ করেছিল তা হ'ল:
files_before = glob.glob(os.path.join(my_path,'*'))
**code where new file is created**
new_file = set(files_before).symmetric_difference(set(glob.glob(os.path.join(my_path,'*'))))
এই কোডগুলি ফাইলের দুটি সেটগুলির মধ্যে অস্বাভাবিক অবজেক্টটিকে সবচেয়ে মার্জিত নয় এটি তালিকাভুক্ত করে এবং একসাথে একাধিক ফাইল তৈরি করা হয় তবে এটি সম্ভবত স্থিতিশীল হবে না
উইন্ডোজে একটি দ্রুত পদ্ধতি (0.05 সে), এমন একটি ব্যাট স্ক্রিপ্ট কল করুন যা এটি করে:
get_latest.bat
@echo off
for /f %%i in ('dir \\directory\in\question /b/a-d/od/t:c') do set LAST=%%i
%LAST%
\\directory\in\questionডিরেক্টরিটি যেখানে আপনি তদন্ত করতে চান।
get_latest.py
from subprocess import Popen, PIPE
p = Popen("get_latest.bat", shell=True, stdout=PIPE,)
stdout, stderr = p.communicate()
print(stdout, stderr)
যদি এটি কোনও ফাইল খুঁজে পায় তবে এটি stdoutহল পথ এবং stderrকোনওটি নয়।
stdout.decode("utf-8").rstrip()ফাইলের নামের ব্যবহারযোগ্য স্ট্রিং প্রতিনিধিত্ব পেতে ব্যবহার করুন ।
ls -Art | tail -n 1। কোনও দাবী করার আগে দয়া করে কোনও সমাধানের কার্যকারিতা মূল্যায়ন করুন ate