كيفية الكتابة إلى ملف في بايثون

باستخدام بايثون، يمكنك تعديل الملف والكتابة عليه مباشرةً برمجيًا، مما يوفر عليك متاعب القيام بذلك يدويًا. ستتعلم في هذه المقالة كيفية الكتابة إلى ملف في بايثون.

هناك طرق متعددة للكتابة على الملفات وكتابة البيانات في بايثون. لنبدأ بالتابع write().

استخدم write()‎ للكتابة إلى ملف في بايثون

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

# open the file in the write mode
f = open('file.txt', 'w')

باستخدام هذه الطريقة، تحتاج إلى إغلاق الملف بنفسك عن طريق استدعاء التابع close() :

# close the file
f.close()

من الأفضل استخدام عبارة with، لأننا لا نحتاج إلى استدعاء التابع Close().

هذا هو التابع الدي سنستخدمه في هذا البرنامج التعليمي:

with open("file.txt", "w") as file:

سيفتح سطر التعليمات البرمجية أعلاه ملف file.txt وسيعين معالج الملف للمتغير المسمى file.

يمكننا بعد ذلك استدعاء التابع write() لتعديل ملفنا برمجياً.

لنقم بتشغيل مثال:

file.write("Python is awesome!")

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

# Open and read the file after writing:
with open("file.txt", "r") as file:
    print(file.read())

من المهم ملاحظة أن المعلمات الموجودة في الدالة open() ستحدد المكان الذي سيكون فيه التابع write() نشط.

استخدم writelines() لإضافة بيانات القائمة إلى ملف

هناك طريقة أخرى يمكنك استخدامها وهي writelines(). تضيف هذه الطريقة مصطلحات القائمة بطريقة برمجية. لنقم بتشغيل مثال:

# open file
with open("file2.txt", "a") as file:
    # write to file
    file.writelines(["Hey there!", "pyarabic.com is awesome!"])
 
#open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

بعد التحقق من المخرجات، ستلاحظ أن writelines()‎ لا تضيف أي فواصل أسطر افتراضيًا؛ علينا أن نحدد فاصل الخط. يمكننا تعديل الكود الخاص بنا بما يلي:

# open and write to file
with open("file2.txt", "a") as file:
    file.writelines(["Hey there!\n", "pyarabic.com is awesome!\n"])
 
# open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

هناك طريقة أكثر بايثونية وفعالة للقيام بذلك وهي:

# open file
with open("file2.txt", "a") as file:
    # set a list of lines to add:
    lines = ["Hey there!", "pyarabic.com is awesome!"]
    # write to file and add a separator
    file.writelines(s + '\n' for s in lines)
 
#open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

سيستخدم الكود أعلاه أسطرًا جديدة كفاصل للأسطر.

كتابة البيانات إلى ملفات CSV في بايثون

قد تجد أنه من المفيد أن تتمكن من تحديث ملف CSV مباشرة باستخدام بايثون.

يرمز CSV إلى القيم المفصولة بفواصل. إذا كنت متخصصًا في البيانات، فمن المؤكد أنك صادفت هذا النوع من الملفات. ملف CSV هو ملف نصي عادي يحتوي على قائمة البيانات. غالبًا ما يستخدم هذا النوع من الملفات لتبادل البيانات بين التطبيقات. إذا كنت ترغب في تحديث معرفتك بملفات CSV، فاقرأ مقالتنا كيفية قراءة ملفات CSV في بايثون.

في هذا الجزء، سنستخدم وحدة CSV المدمجة في بايثون لتحديث ملف CSV.

عندما تريد كتابة البيانات إلى ملف في بايثون، فمن المحتمل أنك تريد إضافة صف واحد أو أكثر في وقت واحد. يمكن تخزين البيانات في قوائم أو قاموس. دعنا نستكشف بعض الطرق لكتابة البيانات إلى الملفات في بايثون.

كتابة بيانات القائمة إلى ملف CSV

دعنا نستكشف كيفية إضافة صف واحد من البيانات باستخدام writerow() وصفوف متعددة من البيانات باستخدام writerows().

استخدم writerow() لصف واحد

للكتابة في ملف CSV، نحتاج إلى فتح الملف وإنشاء كائن الكاتب وتحديث الملف. لنقم بتشغيل مثال:

# import
import csv
 
# Create header and data variables
header = ['last_name', 'first_name', 'zip_code', 'spending']
data = ['amin', 'moh', 546000, 76]
 
with open('customers.csv', 'w', encoding='UTF8', newline='') as file:
    # Create a writer object
    writer = csv.writer(file)
    # Write the header
    writer.writerow(header)
    # Write the data
    writer.writerow(data)

للحصول على معلومات مفصلة، ​​من الجيد دائمًا قراءة الوثائق.

الآن، دعنا نستكشف كيفية كتابة البيانات في بايثون عندما تحتاج إلى إضافة صفوف متعددة من البيانات.

استخدم writerows() لصفوف متعددة

يمكننا كتابة صفوف متعددة في ملف باستخدام التابع writerows() :

# import
import csv
 
# Create header and data variables
header = ['last_name', 'first_name', 'zip_code', 'spending']
data = [
    ['Smith', 'Nicholas', 453560, 82],
    ['Thompson', 'Julia', 326908, 143],
    ['French', 'Michael', 678321, 189],
    ['Wright', 'Eva', 285674, 225],
    ['White', 'David', 213456, 167]
]
 
with open('customers.csv', 'w', encoding='UTF8', newline='') as file:
    # Create a writer object
    writer = csv.writer(file)
    # Write the header
    writer.writerow(header)
    # Add multiple rows of data
    writer.writerows(data)

لقد أضفنا للتو عدة صفوف إلى ملفنا.

يمكنك العثور على مزيد من المعلومات حول التابع writerows() في المستندات.

كتابة بيانات القاموس إلى ملف CSV

إذا كان كل صف من ملف CSV عبارة عن قاموس، فيمكنك تحديث هذا الملف باستخدام دالة dictWriter() الخاصة بوحدة csv. على سبيل المثال:

# import
import csv
 
# csv header
fieldnames = ['last_name', 'first_name', 'zip_code', 'spending']
 
# csv data
rows = [{
    'last_name': 'bloggs',
    'first_name': 'Joe',
    'zip_code': 986542,
    'spending': 367
},{
    'last_name': 'Soap',
    'first_name': 'Bob',
    'zip_code': 567890,
    'spending': 287
},{
    'last_name': 'farnsbarns',
    'first_name': 'Charlie',
    'zip_code': 123456,
    'spending': 245
}]
 
with open('customers.csv', 'w', encoding='UTF8', newline='') as f:
    # Create a writer object
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    # Write header
    writer.writeheader()
    # Write data from dictionary
    writer.writerows(rows)

وهذا كل ما عليك فعله!

استخدام pathlib لكتابة الملفات في بايثون

الآن دعنا نستكشف استخدام وحدة pathlib للكتابة إلى ملف في بايثون.

من المهم ملاحظة أن pathlib يتمتع بإمكانية نقل أكبر بين أنظمة التشغيل وبالتالي فهو مفضل.

استخدم write_text()

يمكننا استخدام التابع Path().write_text() من pathlib لكتابة نص إلى ملف.

أولاً، نستخدم فئة Pathمن pathlib للوصول إلى file.txt، وثانيًا، نستدعي التابع write_text() لإضافة نص بالملف. لنقم بتشغيل مثال:

from pathlib import Path
 
# Open a file and add text to file
 
Path('file.txt').write_text('Welcome to pyarabic.com')

بعد ذلك، سنستخدم الدوال is_file() وwith_name() وwith_suffix() لتصفية الملفات التي نريد تحديثها. سنقوم فقط بتحديث تلك الملفات التي تستوفي شروطًا معينة.

ستعيد الدالة is_file() قيمة منطقية تكون صحيحة إذا كان المسار يشير إلى ملف عادي وخطأ إذا لم يكن كذلك. ستعيد الدالة with_name() مسارًا جديدًا باسم الملف الذي تم تغييره. أخيرًا، سيقوم التابع with_suffix()‎ بإنشاء مسار جديد بامتداد ملف جديد.

يمكنك أن تقرأ عن تفاصيل هذه الطرق في وثائق بايثون.

لنقم بتشغيل مثال يوضح كل هذا. سنفتح ملفنا النصي، ونكتب بعض النصوص، ونعيد تسمية الملف، ونحفظه كملف CSV.

from pathlib import Path
 
# set the directory
path = Path.cwd() / 'file.txt'
 
# Check if the file is a file
if path.is_file():
    # add text
    path.write_text('Welcome to pyarabic.com')
    # rename file with new extension
    path.replace(path.with_name('new_file').with_suffix('.csv'))

معالجة الملفات في بايثون

في هذا الجزء الأخير، سوف نستكشف معالجة الملفات في بايثون باستخدام التابعين tell() وSeek().

استخدم tell() للحصول على الموضع الحالي

يمكن استخدام طريقة tell() للحصول على الموضع الحالي لمؤشر الملف في الملف.

يساعد على تحديد المكان الذي ستتم فيه قراءة البيانات أو كتابتها في الملف من حيث البايتات من بداية الملف.

يمكنك اعتبار مقبض الملف بمثابة مؤشر يحدد مكان قراءة البيانات أو كتابتها في الملف. لا يأخذ هذا التابع أي معلمة ويرجع عددًا صحيحًا.

لنقم بتشغيل مثال:

# Open a file in read mode
with open("file.txt", "r") as file:
    # print position of handle
    print(file.tell())
    # prints 0

يمكنك العثور على مزيد من المعلومات في وثائق PYTHON.

استخدم استخدم استخدم seek() لتغيير مواضع الدفق

يتم استخدام التابع seek() لتغيير موضع الدفق. الدفق عبارة عن سلسلة من عناصر البيانات التي أصبحت متاحة بمرور الوقت، ويشير موضع الدفق إلى موضع المؤشر في الملف.

يعد التابع seek() مفيد إذا كنت بحاجة إلى القراءة أو الكتابة من جزء معين من الملف. بناء الجملة هو:

fp.seek(offset, whence)

ماذا يعني هذا؟

  • fp هو مؤشر الملف.
  • offset هي عدد المواضع التي تريد نقلها. يمكن أن يكون رقمًا موجبًا (للمضي قدمًا) أو سالبًا (للرجوع للخلف).
  • whence يحدد النقطة المرجعية الخاصة بك. يمكن أن يكون:
    • 0: بداية الملف.
    • 1: الموضع الحالي في الملف.
    • 2: نهاية الملف.

إذا قمت بحذف المعلمة من whence، فإن القيمة الافتراضية هي 0.

عندما نفتح الملف، يكون الموضع هو بداية الملف. وبينما نعمل معه، يتقدم الموقف.

تعتبر دالة seek() مفيدة عندما نحتاج إلى السير على طول ملف مفتوح. لنقم بتشغيل مثال سريع:

# Open a file
with open("file.txt", "r") as file:
    file.seek(4)
    print(file.readline())

يمكنك العثور على مزيد من المعلومات في وثائق PYTHON.

تعرف على المزيد حول العمل مع الملفات في بايثون

لقد تناولنا الكثير من الأمور في هذه المقالة. لقد حصلت على بعض المعرفة القوية حول معالجة الملفات باستخدام بايثون.

الآن أنت تعرف كيفية الكتابة إلى ملف في بايثون وكيفية كتابة البيانات إلى ملف في بايثون. لقد استكشفنا أيضًا بإيجاز توابع tell() وseek() لمعالجة ملف.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading