لدي مجلد على هدا الشكل nombers 00 0 1 2 3 4

Møù Nā

عضو جديد
المشاركات
21
مستوى التفاعل
0
النقاط
1
لدي مجلد على هدا الشكل
nombers
00
0
1
2
3
4
01
0
1
2
3
4
........99
هذا شكله هل فهمت

Reasoned for 5 seconds
نعم، فهمت. المجلد الذي تصفه يحتوي على هيكل متعدد المستويات، حيث يوجد مجلد رئيسي يسمى "nombers"، ثم يحتوي على مجلدات فرعية تسمى "00"، "01"، وهكذا حتى "99". داخل كل مجلد فرعي، يوجد ملفات أو مجلدات بأرقام من 0 إلى 4.

هل تحتاج إلى مساعدة في تنظيم أو تنفيذ شيء معين في هذا الهيكل؟

أنت قلت:
اريد عمل كود بيثون يقوم
نسخ ملف نصي من داخل كل مجلد فرعي للفرعي رقم 4 لكل ملف فرعي الى مسار محدد
اسم الملف list_all.txt

4/4


Reasoned for 7 seconds
يمكنك استخدام الكود التالي في Python لتحقيق ما تريده. الكود يقوم بالبحث عن المجلدات الفرعية داخل مجلد nombers، ثم ينسخ الملف النصي list_all.txt من المجلد الفرعي رقم 4 داخل كل مجلد فرعي إلى المسار المحدد الذي تريده:

python
نسخ
import os
import shutil

# المسار الرئيسي حيث توجد المجلدات
source_directory = 'path_to_your_nombers_folder' # استبدل بالمسار الفعلي لمجلد "nombers"
destination_directory = 'path_to_destination_folder' # استبدل بالمسار الذي تريد نسخ الملفات إليه

# التأكد من أن المجلد الوجهة موجود
if not os.path.exists(destination_directory):
os.makedirs(destination_directory)

# التكرار عبر المجلدات داخل "nombers"
for subfolder in os.listdir(source_directory):
subfolder_path = os.path.join(source_directory, subfolder)

# التأكد أن المجلد هو مجلد فرعي يحتوي على مجلدات 0-4
if os.path.isdir(subfolder_path):
# التأكد من وجود مجلد 4
subfolder_4_path = os.path.join(subfolder_path, '4')

if os.path.isdir(subfolder_4_path):
# التحقق من وجود الملف list_all.txt داخل المجلد 4
file_path = os.path.join(subfolder_4_path, 'list_all.txt')

if os.path.isfile(file_path):
# نسخ الملف إلى المسار المحدد
shutil.copy(file_path, destination_directory)
print(f"تم نسخ الملف من {file_path} إلى {destination_directory}")
else:
print(f"الملف {file_path} غير موجود.")
else:
print(f"المجلد الفرعي 4 غير موجود في {subfolder_path}.")
شرح الكود:
المسارات: قم بتحديد مسار مجلد nombers في source_directory والمجلد الوجهة في destination_directory.
التكرار عبر المجلدات: الكود يتكر عبر المجلدات الفرعية داخل nombers ويتحقق مما إذا كان يحتوي على مجلد فرعي يسمى 4.
نسخ الملف: إذا كان ملف list_all.txt موجودًا في المجلد الفرعي رقم 4، يتم نسخه إلى المجلد الوجهة.
ملاحظات:
تأكد من أن المسارات التي أدخلتها صحيحة.
إذا كان هناك العديد من الملفات بنفس الاسم في المجلدات الفرعية، سيقوم الكود بنسخ جميع الملفات إلى الوجهة المحددة.
أنت قلت:
في كل مرة تنسخ الملف غير له اسمه لكي لا يختلط مع الملفات الاخرى اكتب اسم الملف الفرعي في اول اسم الملف النصي

Reasoned for 6 seconds
لتعديل الكود بحيث يتم إضافة اسم المجلد الفرعي إلى بداية اسم الملف النصي المنسوخ، يمكنك استخدام الكود التالي:

python
نسخ
import os
import shutil

# المسار الرئيسي حيث توجد المجلدات
source_directory = 'path_to_your_nombers_folder' # استبدل بالمسار الفعلي لمجلد "nombers"
destination_directory = 'path_to_destination_folder' # استبدل بالمسار الذي تريد نسخ الملفات إليه

# التأكد من أن المجلد الوجهة موجود
if not os.path.exists(destination_directory):
os.makedirs(destination_directory)

# التكرار عبر المجلدات داخل "nombers"
for subfolder in os.listdir(source_directory):
subfolder_path = os.path.join(source_directory, subfolder)

# التأكد أن المجلد هو مجلد فرعي يحتوي على مجلدات 0-4
if os.path.isdir(subfolder_path):
# التأكد من وجود مجلد 4
subfolder_4_path = os.path.join(subfolder_path, '4')

if os.path.isdir(subfolder_4_path):
# التحقق من وجود الملف list_all.txt داخل المجلد 4
file_path = os.path.join(subfolder_4_path, 'list_all.txt')

if os.path.isfile(file_path):
# إضافة اسم المجلد الفرعي إلى بداية اسم الملف
new_file_name = f"{subfolder}_list_all.txt"
new_file_path = os.path.join(destination_directory, new_file_name)

# نسخ الملف إلى المسار المحدد مع اسم جديد
shutil.copy(file_path, new_file_path)
print(f"تم نسخ الملف من {file_path} إلى {new_file_path}")
else:
print(f"الملف {file_path} غير موجود.")
else:
print(f"المجلد الفرعي 4 غير موجود في {subfolder_path}.")
التعديلات في الكود:
إضافة اسم المجلد الفرعي إلى اسم الملف: عند نسخ الملف، يتم إضافة اسم المجلد الفرعي (مثل 00 أو 01) إلى بداية اسم الملف list_all.txt. على سبيل المثال، إذا كان المجلد الفرعي هو 00، فسيتم تغيير اسم الملف إلى 00_list_all.txt.
التأكد من أن الملف يتم نسخه بالاسم الجديد: الملف سيحمل الاسم الجديد ويتم نسخه إلى الوجهة المحددة.
الآن، لن يتم خلط الملفات النصية مع بعضها البعض لأن كل ملف سيحمل اسم المجلد الفرعي الذي تم نسخه منه.

أنت قلت:
اشرح الكود ماذا يفعل

Reasoned for a couple of seconds
الكود الذي كتبته يقوم بالخطوات التالية:

تحديد المسارات:

source_directory: هو المسار الذي يحتوي على المجلد الرئيسي nombers الذي يتضمن المجلدات الفرعية (مثل 00, 01, ...).
destination_directory: هو المسار الذي سيتم نسخ الملفات إليه. هنا سيتم حفظ الملفات المنسوخة.
التحقق من وجود المجلد الوجهة:

يقوم الكود بالتحقق مما إذا كان المجلد الذي ستنسخ إليه الملفات موجودًا أم لا باستخدام os.path.exists(). إذا لم يكن موجودًا، يقوم بإنشائه باستخدام os.makedirs().
التكرار عبر المجلدات الفرعية:

الكود يتكرر عبر جميع المجلدات الفرعية داخل المجلد nombers باستخدام os.listdir(). يقوم بتحديد إذا كان العنصر هو مجلد فرعي باستخدام os.path.isdir().
البحث عن المجلد الفرعي رقم 4:

داخل كل مجلد فرعي (مثل 00, 01, ...) يقوم الكود بالبحث عن مجلد فرعي يسمى 4 داخل المجلد الفرعي الحالي.
يتحقق من وجود المجلد 4 باستخدام os.path.isdir().
البحث عن الملف list_all.txt:

بعد التأكد من وجود المجلد الفرعي 4, يقوم الكود بالبحث عن الملف list_all.txt داخل هذا المجلد.
إذا كان الملف موجودًا، ينتقل إلى الخطوة التالية.
إعادة تسمية الملف عند النسخ:

الكود يضيف اسم المجلد الفرعي (مثل 00 أو 01) إلى بداية اسم الملف عند نسخه، بحيث يصبح اسم الملف الجديد مثل 00_list_all.txt أو 01_list_all.txt.
هذا يساعد على تفادي التداخل بين الملفات المنسوخة.
نسخ الملف:

بعد إعادة التسمية، يتم نسخ الملف list_all.txt إلى المجلد الوجهة (destination_directory) باستخدام shutil.copy().
يتم طباعة رسالة لتوضيح أن الملف قد تم نسخه بنجاح.
التعامل مع الأخطاء:

إذا لم يجد المجلد الفرعي 4 أو إذا كان الملف list_all.txt غير موجود، يتم طباعة رسالة توضح هذا.
مثال:
إذا كان لديك المجلدات 00 و 01 وكل منهما يحتوي على مجلد فرعي 4 فيه الملف list_all.txt, سيتحقق الكود من وجوده في كل منهما، ثم ينسخه إلى المجلد الوجهة مع إضافة اسم المجلد الفرعي في بداية اسم الملف:
من 00/list_all.txt إلى destination_directory/00_list_all.txt
من 01/list_all.txt إلى destination_directory/01_list_all.txt
المخرجات:
في حالة نجاح النسخ، ستظهر رسالة مثل:
تم نسخ الملف من /path/to/your/nombers/00/4/list_all.txt إلى /path/to/destination/00_list_all.txt
 

Møù Nā

عضو جديد
المشاركات
21
مستوى التفاعل
0
النقاط
1
قم بعمل كود بيثون يقوم بالتالي
في مجلد يوجد مجموعة صور .tif و مجموعة ملفات نصية .txt
لكل صور ملف نصي يحميلان نفس الاسم
يوجد بعض الحالات التي يتواجد فيها ملف نصي بدون صورة خاص به او العكس
اريد ان تقوم بعمل كود اعطيك مسار المجلد و تبحث على الحالات التي يكون فيها احد الملفات ناقص و تكتب اسمه في قائمة و في الاخير يتم حفظ الملف الذي يحتوي على اسماء الملفات الناقصة في مسار على شكل .txt

Reasoned for 7 seconds
It seems that I attempted to run the code with a placeholder folder path. You'll need to replace "/path/to/your/folder" with the actual path of the folder where your .tif and .txt files are located. Here’s the corrected code that you can run on your machine:

python
نسخ
import os

def find_missing_files(folder_path):
images = set()
texts = set()
missing_files = []

# Traverse through the folder
for filename in os.listdir(folder_path):
if filename.endswith(".tif"):
images.add(filename)
elif filename.endswith(".txt"):
texts.add(filename)

# Compare the two sets to find missing files
for image in images:
if image.replace(".tif", ".txt") not in texts:
missing_files.append(image.replace(".tif", ".txt"))

for text in texts:
if text.replace(".txt", ".tif") not in images:
missing_files.append(text.replace(".txt", ".tif"))

# Save the missing file names to a text file
missing_files_path = os.path.join(folder_path, "missing_files.txt")
with open(missing_files_path, "w") as f:
for file in missing_files:
f.write(file + "\n")

return missing_files_path


# Example usage
folder_path = "/path/to/your/folder" # Replace this with your folder path
missing_files_list_path = find_missing_files(folder_path)
print(f"List of missing files saved at: {missing_files_list_path}")
Replace "/path/to/your/folder" with the actual folder path, and it will create a file named missing_files.txt listing the missing files. Let me know if you need further assistance.

أنت قلت:
ماذا يفعل هذا الكود

Reasoned for a couple of seconds
الكود الذي قمت بطلبه يقوم بالآتي:

البحث عن الملفات في المجلد:

يبحث داخل المجلد المحدد (folder_path) عن جميع الملفات التي تنتهي بالامتدادات .tif (صور) و .txt (ملفات نصية).
إنشاء مجموعتين:

مجموعة images: تحتوي على أسماء الملفات التي تنتهي بـ .tif (الصور).
مجموعة texts: تحتوي على أسماء الملفات التي تنتهي بـ .txt (الملفات النصية).
التحقق من الملفات المفقودة:

يتحقق من وجود علاقة بين الملفات النصية والملفات الصور. فإذا كان هناك ملف صورة .tif ولا يوجد له ملف نصي مرفق بنفس الاسم (أي ملف نصي بنفس الاسم مع امتداد .txt)، يتم إضافة اسم الملف النصي المفقود إلى قائمة missing_files.
بالمثل، إذا كان هناك ملف نصي .txt ولا يوجد له ملف صورة مرفق بنفس الاسم (أي ملف صورة بنفس الاسم مع امتداد .tif)، يتم إضافة اسم الملف الصورة المفقودة إلى قائمة missing_files.
حفظ الملفات المفقودة:

يتم حفظ قائمة الملفات المفقودة في ملف نصي يسمى missing_files.txt داخل نفس المجلد (folder_path).
إرجاع مسار الملف:

في النهاية، يعيد الكود مسار الملف الذي يحتوي على أسماء الملفات المفقودة.
ملخص: الكود يفحص المجلد ويبحث عن الملفات التي لا يوجد لها شريك (سواء كان ملف نصي أو صورة)، ثم يقوم بتسجيل هذه الملفات المفقودة في ملف نصي جديد.
 

Møù Nā

عضو جديد
المشاركات
21
مستوى التفاعل
0
النقاط
1
ماذا يفعل هذا الكود

# Load images and their corresponding coordinates
def load_images_and_coordinates(folder, target_size):
images = []
coordinates = []
for filename in os.listdir(folder):
if filename.endswith('.tif'):
# Load image
img_path = os.path.join(folder, filename)
img = Image.open(img_path).convert("RGB")
original_width, original_height = img.size

# Resize image with padding
scale_x = (target_size[0] - original_width) // 2
scale_y = (target_size[1] - original_height) // 2

# Create a new image with padding
new_img = Image.new("RGB", (target_size[0], target_size[1]), color=(0, 0, 0)) # استخدم RGB
new_img.paste(img, (scale_x, scale_y))

# Load corresponding coordinates
coord_filename = filename.replace('.tif', '.txt')
coord_path = os.path.join(folder, coord_filename)
with open(coord_path, 'r') as file:
coords = file.read().strip().replace('/n', '').split(',')
coords = list(map(int, coords))
coords[0] += scale_x
coords[1] += scale_y
coords[2] += scale_x
coords[3] += scale_y
images.append(np.array(new_img))
coordinates.append(tuple(coords))

return images, coordinates

target_size = (165, 84) # Example target size
train_folder_path = 'D:/new/data test/50%/train'
images_train, coordinates_train = load_images_and_coordinates(train_folder_path, target_size)


test_folder_path = 'D:/new/data test/50%/test'
images_test, coordinates_test = load_images_and_coordinates(test_folder_path, target_size)


buffer = io.BytesIO()

# حفظ المصفوفات في الذاكرة بدلاً من الكتابة مباشرة في gzip
np.savez(buffer, images_train=images_train, coordinates_train=coordinates_train, images_test=images_test, coordinates_test=coordinates_test)

# الضغط باستخدام gzip
with gzip.GzipFile('D:/new/data test/50%/50%dataset.gz', 'w') as f:
f.write(buffer.getvalue())

Reasoned for 6 seconds
هذا الكود يقوم بعدة خطوات لمعالجة الصور والبيانات ذات الصلة:

تحميل الصور والبيانات المتناظرة (الإحداثيات):

الدالة load_images_and_coordinates(folder, target_size):
تقوم بتحميل الصور ذات الامتداد .tif من مجلد محدد.
لكل صورة، يتم تقليص حجم الصورة (مع إضافة حواف باللون الأسود إذا لزم الأمر) بحيث يكون الحجم الجديد مطابقًا للقيمة المحددة في target_size.
يتم أيضًا تحميل الإحداثيات المتناظرة (مخزنة في ملفات نصية بنفس اسم الصورة ولكن بامتداد .txt).
هذه الإحداثيات يتم تعديلها بناءً على مقدار الإزاحة الناتج عن تغيير حجم الصورة، وذلك لتوافق الإحداثيات مع الحجم الجديد للصورة.
التخزين في الذاكرة:

يتم تخزين الصور (بعد تغيير الحجم) والإحداثيات المعدلة في قوائم images و coordinates.
حفظ البيانات في الذاكرة باستخدام np.savez:

يتم تخزين البيانات (الصور والإحداثيات) في الذاكرة باستخدام np.savez، بحيث يتم تجميع البيانات في تنسيق npz في ذاكرة مؤقتة (في buffer).
ضغط البيانات باستخدام gzip:

يتم ضغط البيانات المخزنة في buffer باستخدام gzip ثم يتم حفظ الملف المضغوط باسم 50%dataset.gz في المسار المحدد.
الغرض:

معالجة الصور لتغيير حجمها مع الحفاظ على البيانات المتناظرة.
ضغط وتخزين البيانات في ملف مضغوط لتقليل حجم الملف.
ملاحظات:
تأكد من أن تنسيق الإحداثيات في ملفات النصوص صحيح (يجب أن تكون قيمة /n مستبدلة بـ \n في السطر الذي يقرأ الإحداثيات).
الكود يقوم باستخدام مكتبة Pillow لتحميل ومعالجة الصور، و numpy لتخزين البيانات.
 
أعلى