مدیریت فایل های پایتون: خواندن، نوشتن و حذف فایل ها در پایتون

مدیریت فایل در برنامه نویسی پایتون بیانگر عمل تعامل با فایل ها با استفاده از توابع یا ماژول های داخلی پایتون است. متداول ترین تابع در پایتون برای خواندن و نوشتن روی فایل ها این است open() تابع.

تابع داخلی open() Python یک شی فایل را برمی‌گرداند که روی آن می‌توان از روش‌ها برای تعامل با منبع اصلی استفاده کرد.

مدیریت فایل در پایتون چیست؟

مدیریت فایل به ذخیره خروجی یا ورودی یک برنامه پایتون در یک فایل داده (مثلا فایل متنی یا باینری) برای مراجعات بعدی اشاره دارد.

فایل در پایتون چیست؟

در پایتون یک فایل a است ساختار داده ای که برای ذخیره و سازماندهی اطلاعات استفاده می شود. می توان آن را در دو حالت استفاده کرد: متنی یا باینری. یک فایل می تواند در قالب متنی یا باینری باشد و هر خط در یک فایل معمولاً با یک کاراکتر خاص خاتمه می یابد.

انواع فایل ها در پایتون

دو نوع فایل اصلی در پایتون وجود دارد:

  1. فایل های متنی
  2. فایل های باینری

فایل های متنی

فایل‌های متنی در پایتون فایل‌هایی هستند که داده‌های متنی (مثلاً فایل متنی) را با استفاده از رمزگذاری‌های کاراکتری مانند ASCII، UTF-8، و غیره رمزگذاری می‌کنند. هنگام کار با فایل‌های متنی در پایتون، می‌توانید داده‌های متنی را با استفاده از عملیات و توابع رشته بخوانید و بنویسید.

فایل های باینری

فایل‌های باینری فایل‌هایی هستند که داده‌های غیر متنی (مثلاً تصاویر، صدا، ویدئو و غیره) را به‌جای متن ذخیره می‌کنند، در قالب باینری (0s و 1s) ذخیره می‌کنند. برای خواندن یا نوشتن فایل‌های باینری در پایتون، از روش‌ها یا کتابخانه‌های مدیریت فایل‌های باینری استفاده کنید struct ماژول یا کتابخانه های تخصصی برای فرمت های فایل خاص.

عملیات فایل در پایتون

عملیات فایل در پایتون معمولاً به ترتیب زیر است:

  1. باز کردن یک فایل با استفاده از تابع open().
  2. انجام عملیات خواندن یا نوشتن با استفاده از روش های داخلی
  3. بستن فایل

این امکان خواندن یا نوشتن داده‌ها از فایل‌ها را در صورت نیاز فراهم می‌کند و انعطاف‌پذیری در مدیریت انواع مختلف وظایف ذخیره‌سازی و بازیابی داده‌ها را فراهم می‌کند.

با تابع Open() یک فایل را در پایتون باز کنید

برای باز کردن یک فایل در پایتون، از تابع داخلی open() استفاده کنید و مکان فایل و حالت را به عنوان پارامترهای تابع ارائه کنید.

# open() function
f = open('filename.txt') # open file
f.close() # close file

تابع باز دارای دو آرگومان موقعیتی و چندین آرگومان کلیدواژه است.

open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

اولین آرگومان رشته ای است که مکان فایلی که باید باز شود را می گوید. آرگومان دوم رشته ای است که حالت را مشخص می کند. حالت نحوه استفاده از فایل را هنگام باز کردن (خواندن، نوشتن، پیوست و غیره) می گوید.

پارامتر کلمه کلیدی رشته ای است که رمزگذاری داده های خوانده شده از فایل را می گوید ('b' برای بایت یا پیش فرض 'utf-8').

حالت و آرگومان های کلیدواژه دیگر در تابع open() اختیاری هستند.

حالت های عملکرد باز

در زیر حالت هایی که می توان در تابع open() در پایتون استفاده کرد فهرست شده است:

شخصیت معنی حالت
'r' باز کردن فایل در حالت خواندن (پیش‌فرض)
'w' فایل را در حالت نوشتن باز کنید
'x' باز کردن فایل برای ایجاد انحصاری
'a' فایل را در حالت نوشتن/افزودن باز کنید. در صورت وجود فایل به انتها اضافه می شود
‘+’ فایل را در حالت خواندن و نوشتن باز کنید
'b' باز کردن فایل در حالت باینری
't' باز کردن فایل در حالت متنی (پیش‌فرض)

باز کردن یک فایل در پایتون

برای باز کردن یک فایل در پایتون، از تابع open() با محل فایل به عنوان پارامتر رشته استفاده کنید. فراموش نکنید که اتصال را با استفاده از متد close() روی شی فایل ببندید.

# Open file
filename = 'my_file.txt'
f = open(filename)

# Show the open mode
print(f.mode)
r

بستن یک فایل در پایتون

برای بستن فایل پایتون، از متد ()close در شی فایل پایتون استفاده کنید.

# Needs to be closed or it stays open
f.close()

چرا بستن یک فایل در پایتون مهم است؟

هنگامی که فایلی را در پایتون باز می کنید، سیستم عامل منابعی (مانند دسته فایل) را برای مدیریت ارتباط بین برنامه شما و فایل اختصاص می دهد.

اگر فایل را نبندید، ممکن است این منابع منتشر نشوند، که منجر به نشت منابع و مشکلات احتمالی در سایر برنامه‌ها یا فرآیندهایی می‌شود که سعی در دسترسی به همان فایل دارند.

به عنوان مثال، با باز کردن 3 فایل در حالت نوشتن، می توانیم دسته های اتصال را مشاهده کنیم:

files = [open(f"files/file_{n}.txt", mode="w") for n in range(3)]

با این حال، این اتصالات تا زمانی که آنها را نبندید باز می مانند. خیلی زیاد است و ممکن است سیستم شما خراب شود.

# The OS Can manage millions of files
for f in files:
    print(f.closed)
False
False
False

اجازه دهید فایل ها را ببندیم.

# Closing the files
for f in files:
    f.close()
    print(f.closed)

با Open – باز کردن فایل های پایتون با مدیریت زمینه

مدیران زمینه برای دادن و انتشار منابع در صورت نیاز قبل و بعد از عملیاتی که به آن نیاز دارد استفاده می شود.

را with بیانیه به شما این امکان را می دهد که پس از انجام عملیات، یک اتصال را باز و بسته کنید.

استفاده از مدیریت زمینه هنگام مدیریت فایل ها در پایتون همیشه یک تمرین خوب است.

# Open with context manager
with open('files/my_file.txt', 'r') as f:
    print(f.name)

print(f.closed)
files/my_file.txt
True

خواندن یک فایل متنی در پایتون با استفاده از read()

برای خواندن فایل در پایتون از متد read() روی شی فایل استفاده کنید.

# read(): Read the contents of the file
with open('files/my_file.txt', 'r') as f:
    print(f.read())

خواندن فایل تا موقعیت نهم با read(n)

برای خواندن فایل تا یک موقعیت، یک عدد صحیح به عنوان آرگومان متد خواندن اضافه کنید.

# read(): Read the contents of the file to a Nth position
with open('files/my_file.txt', 'r') as f:
    print(f.read(10))

از طریق هر خط یک فایل در پایتون حلقه بزنید

برای خواندن خط به خط یک فایل، می توانید از حلقه for برای چاپ هر خط یکی پس از دیگری استفاده کنید.

# Loop line-by-line
with open('files/my_file.txt', 'r') as f:
    for line in f:
        print(line)

خواندن یک خط از یک فایل با readline()

متد readline() فایل را تا خط جدید یا EOF می خواند و اگر EOF فوراً زده شود یک رشته خالی برمی گرداند.

file.readline(size=-1)

تنها پارامتر اختیاری اندازه است که نشان دهنده تعداد بایت هایی است که از خط باز می گردد. مقدار پیش فرض آن -1 است که به معنای کل خط است.

# readline(): Reads a single line from the file
with open('files/my_file.txt', 'r') as f:
    line = f.readline()

line

خواندن خطوط فایل پایتون به یک لیست – readlines() در مقابل read().split()

برای خواندن هر خط از یک فایل پایتون و افزودن آنها به یک لیست، از متد readlines() یا از متد read() برای خواندن فایل استفاده کنید و سپس روش split(‘\n’) را روی خروجی اعمال کنید.

استفاده از Readlines()

را readlines() متد به شما امکان می دهد هر خط از یک فایل پایتون را بخوانید و آنها را به یک لیست اضافه کنید. در پایتون، readlines() نتیجه را به عنوان لیستی از رشته ها که جداکننده خط جدید هنوز در هر مورد از لیست وجود دارد، برمی گرداند.

file.readlines(hint=-1)

نکته را می توان برای کنترل تعداد خطوط خوانده شده مشخص کرد. اگر اندازه کل (بر حسب بایت/ کاراکتر) تمام خطوط تا کنون بیش از اشاره باشد، هیچ خط دیگری خوانده نخواهد شد.

# readlines(): Returns a list of lines from the file
with open('files/my_list.txt', 'r') as f:
    ls = f.readlines()
ls
['Montreal\n',
 'Tokyo\n',
 'Istanbul\n',
 'New-York\n',
 'London\n',
 'Melbourne\n',
 'Marrakesh']

استفاده از read().split()

را split() روش را می توان بر روی استفاده کرد read() شیء برای تقسیم پایتون با استفاده از \n کاراکتر و فایل پایتون را در یک لیست بخوانید.

file.read().split('\n')
# Read lines to list
with open('files/my_list.txt', 'r') as f:
    content = f.read()
    ls = content.split('\n')
ls
['Montreal',
 'Tokyo',
 'Istanbul',
 'New-York',
 'London',
 'Melbourne',
 'Marrakesh']

با استفاده از write() در فایل پایتون بنویسید

متد write() برای نوشتن رشته در یک شی فایل استفاده می شود و تعداد کاراکترهای نوشته شده را برمی گرداند. برای استفاده از متد write() در فایل پایتون، شی فایل باید با استفاده از یکی از حالت‌های زیر در تابع open() باز شود: ‘w’، ‘a’ یا ‘+’.

file.write(text)

نوشتن در یک فایل در حالت نوشتن (‘w’)

# write(): Writes a string to the file
with open('files/my_file.txt', 'w') as f:
    f.write('Hello world')

افزودن به یک فایل در حالت افزودن (‘a’)

# Append to a file
with open('files/my_file.txt', 'a') as f:
    f.write('\nhello world')

نوشتن در یک فایل در حالت خواندن/نوشتن (‘r+’)

# write(): Writes a string to the file
with open('files/my_file.txt', 'r+') as f:
    f.write('Hello world')

نوشتن چندین خط در یک فایل پایتون با استفاده از Writlines()

متد writelines() روی شی فایل پایتون برای نوشتن لیستی از خطوط در یک جریان استفاده می شود.

file.writelines(lines)
# Write List to a file
my_list = [
    'Line 1\n',
    'Line 2\n',
    'Line 3\n'
    ]

with open('files/writelines.txt', 'w') as f:
    f.writelines(my_list)

توجه داشته باشید که جداکننده‌های خطوط (\n) اضافه نشده‌اند، بنابراین تمرین خوبی است که در پایان هر خط را با جداکننده خط ارائه کنید.

نحوه حذف یک فایل در پایتون

برای حذف یک فایل در پایتون، از متد remove() از ماژول os استفاده کنید.

import os
os.remove("filename.txt")

نحوه مدیریت یک فایل JSON در پایتون

برای باز کردن، خواندن و نوشتن در یک فایل JSON در پایتون، از تابع open در فایل JSON استفاده کنید و از ماژول json برای مدیریت عملیات استفاده کنید.

در فایل JSON بنویسید

# Write to JSON file
import json

data = {
    'name': 'Jean-Christophe', 
    'website': 'jcchouinard.com'
    }

with open('files/my_file.json', 'w') as f:
    json.dump(data, f, indent=4)

فایل JSON را بخوانید

# Read JSON file
with open('files/my_file.json', 'r') as f:
    data = json.load(f)

data

وضعیت فایل باز شده را بررسی کنید – قابل خواندن، قابل نوشتن

متدهای readable() و writeable() یک بولی برمی‌گردانند، چه شیء برای خواندن یا نوشتن باز شده باشد یا نه.

# Check the state of the file
with open('files/my_file.txt', 'r') as f:
    print(f.readable())
    print(f.writable())
True
False

با seek() موقعیت را از کجا شروع به خواندن یک فایل کنیم

متد seek() در شی فایل پایتون برای جبران موقعیت جریان (فایل) در بایت استفاده می شود. برای اینکه بگوییم عملیات از کجا شروع شود استفاده می شود.

seek(cookie, whence=0)
# seek(): Changes the file position to a specified location

# Read a file line by line
with open('files/my_file.txt', 'r') as f:
    print('No offset:', f.readline())

# Read a file line by line
with open('files/my_file.txt', 'r') as f:
    f.seek(6)
    print('Offset:', f.readline())
No offset: 1. Hello World

Offset: lo World

افست نسبت به موقعیتی که با کجا نشان داده شده است تفسیر می شود. ارزش‌هایی که از کجاست عبارتند از:

  • 0 : شروع جریان (پیش فرض)؛ افست باید صفر یا مثبت باشد
  • 1: موقعیت جریان فعلی؛ افست ممکن است منفی باشد
  • 2: انتهای جریان; افست معمولا منفی است

موقعیت جریان را با tell() بررسی کنید

متد tell() روی شی فایل پایتون برای برگرداندن موقعیت فعلی جریان استفاده می شود. مثال زیر نشان می دهد که چگونه متد ()tell همان موقعیتی را که با متد seek() داده بودیم برمی گرداند.

# tell(): Returns the current file position
# Read a file line by line
with open('files/my_file.txt', 'r') as f:
    f.seek(6)
    print(f.tell())
6

مشخص کنید چه مقدار از فایل باید با truncate() حذف شود

متد truncate() برای کوتاه کردن یک فایل استفاده می شود و مشخص می کند چه مقدار از فایل باید بر حسب بایت حذف شود.

truncate(pos=None)
# Print the current contents of the file
with open("example.txt", "r") as file:
    print("Before truncate:")
    print(file.read())

# Truncate the file to a specified position
with open("example.txt", "r+") as file:
    file.truncate(14)

# Print the modified contents of the file
with open("example.txt", "r") as file:
    print("\nAfter truncate:")
    print(file.read())
Before truncate:
Hello, World!
This is an example file.

After truncate:
Hello, World!

بررسی کنید که آیا فایل از دسترسی تصادفی seekable () پشتیبانی می کند یا خیر

متد seekable() برمی گرداند که آیا شی فایل از دسترسی تصادفی پشتیبانی می کند یا خیر. اگر False، seek()، tell() و truncate() خطای OSE را افزایش می دهد.

# Read a file line by line
with open('files/my_file.txt', 'r') as f:
    print(f.seekable())
True

نمایش شناسه فایل با fileno()

متد fileno() در صورت وجود توصیفگر فایل زیرین را برمی گرداند. توصیفگر فایل یک شناسه عدد صحیح غیر منفی است که یک فایل باز شده را در سیستم عامل شناسایی می کند.

# Read a file line by line
with open('files/my_file.txt', 'r') as f:
    print(f.fileno())
72

متد flush() در پایتون چیست؟

متدهای flush() فایل، بافرهای نوشتن را در صورت امکان شستشو می دهد.

برای درک این موضوع، بدانید که دو سطح بافر در نوشتن فایل وجود دارد:

  • بافرهای داخلی
  • بافرهای سیستم عامل

بافرهای داخلی توسط زبان برنامه نویسی برای بهینه سازی عملیات نوشتن استفاده می شود، در حالی که بافرهای سیستم عامل ممکن است داده ها را قبل از نوشتن روی دیسک نگه دارند. برای اطمینان از اینکه داده ها روی دیسک نوشته می شوند، می توانید از روش flush برای نوشتن داده ها از بافرهای برنامه به بافرهای سیستم عامل و از روش fsync برای همگام سازی بافرهای سیستم عامل با دیسک استفاده کنید.

import os
# Open a file in write mode
file = open("example.txt", "w")

# Write data to the file
file.write("Hello, World!")

# The data is now in the program buffer
# Use flush to write the data from the program buffer to the operating system buffer
file.flush()

# At this point, the data is in the operating system buffer but may not be on disk yet

# Use fsync to synchronize the operating system buffer with the disk
os.fsync(file.fileno()) # Sync file descriptor

# Now, the data is guaranteed to be written to disk

# Close the file
file.close()

متد detach() در پایتون چیست؟

متد detach() بافر زیرین را از TextIOBase جدا کرده و آن را برمی گرداند. پس از جدا شدن، TextIO در حالت غیرقابل استفاده قرار می گیرد.

# Open a file in write mode
file = open("example.txt", "w")

# Write some content to the file
file.write("Hello, World!\nThis is an example file.")

# Detach the file object from the file descriptor
file_descriptor = file.detach()

# Verify that the file object is detached
print(file)
print(file_descriptor)

# Close the file descriptor separately (if needed)
file_descriptor.close()

# Don't need to close file, it has been detached. Throws ValueError
file.close()
<_io.TextIOWrapper mode='w' encoding='UTF-8'>
<_io.BufferedWriter name='example.txt'>

متد isatty() در پایتون چیست؟

متد isatty برمی‌گرداند که آیا شی فایل یک جریان «تعاملی» است یا نه و اگر نمی‌توان آن را تعیین کرد، False را برمی‌گرداند.

روش های مدیریت فایل

در اینجا جدولی با روش هایی وجود دارد که می توان روی شی فایلی که توسط the برگردانده می شود استفاده کرد open() تابع.

روش چکار میکند مثال پایتون
بستن() فایل را می بندد. file.close()
خواندن() محتویات فایل را می خواند. content = file.read()
readline() یک خط از فایل را می خواند. line = file.readline()
Readlines() لیستی از خطوط فایل را برمی گرداند. lines = file.readlines()
نوشتن() یک رشته در فایل می نویسد. file.write (“سلام، دنیا!”)
Writlines() لیستی از خطوط را در فایل می نویسد. file.writelines (خطوط)
جستجو () موقعیت فایل را به یک مکان مشخص تغییر می دهد. file.seek (5)
content = file.read()
بگو() موقعیت فعلی فایل را برمی گرداند. position = file.tell()
فلاش () بافر داخلی را شستشو می دهد. file.write (“سلام، دنیا!”)
file.flush()
کوتاه کردن () فایل را به اندازه مشخصی کوتاه می کند. file.truncate(5)
content = file.read()
جدا کردن () توصیفگر فایل خام زیرین را از شی فایل جدا می کند. file.detach()
fileno() توصیفگر فایل مرتبط با شی فایل را برمی گرداند. file.fileno()
isatty() بررسی می کند که آیا فایل با دستگاه ترمینال مرتبط است یا خیر. file.isatty()
قابل خواندن () بررسی می کند که آیا فایل قابل خواندن است یا خیر. file.readable()
جستجو پذیر () بررسی می کند که آیا فایل از دسترسی تصادفی پشتیبانی می کند. file.seekable()
قابل نوشتن() بررسی می کند که آیا فایل قابل نوشتن است یا خیر. file.writable()

نکته پایانی در مورد مدیریت فایل در پایتون

اکنون همه چیزهایی را که برای مدیریت فایل‌ها در پایتون باید بدانیم، مانند خواندن، نوشتن و حذف فایل‌های پایتون، پوشش داده‌ایم.

ما همچنین متدهای مدیریت فایل پایتون شی جریان را دیده ایم که توسط تابع open() Python بازگردانده شده است.

سئو PBN | خبر های جدید سئو و هک و سرور