خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

راهنمای کار با فایل های متنی در Go

آیا می خواهید با استفاده از Go یک فایل متنی را بخوانید و بنویسید؟ بسته های os و bufio زبان برنامه نویسی Go کار با فایل های متنی را ساده می کند.

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

فایل ها اجزای مهم زندگی روزمره ما در دنیای مدرن هستند. فایل های متنی برای ذخیره سازی داده های ساختار یافته قابل خواندن توسط انسان بدون استفاده از نرم افزارهای خارجی یا پایگاه داده مفید هستند.

اگر نمی‌دانید چگونه می‌توانید دستکاری فایل‌های متنی را در Go شروع کنید، این مقاله مکان مناسبی برای شماست.

بسته bufio in Go

بسته bufio، که بخشی از کتابخانه استاندارد Go است، برای عملیات ورودی و خروجی بافر استفاده می‌شود، از این رو نام آن به‌دست می‌آید. بسته bufio بر پایه رابط های io.Reader و io.Writer است که به طور گسترده در اجرای اکثر بسته های استاندارد Go استفاده می شود.

بسته bufio با اجرای بافر یک گام جلوتر می رود و برای عملیات IO که شامل داده های متنی است مفید است.

برای استفاده از بسته bufio در برنامه خود، باید آن را در کنار بسته های دیگر وارد کنید.

import (
    "fmt"
    "bufio"
)

احتمالاً زمانی که با Go شروع به کار کردید شنیده اید که هر چیزی را که احتمالاً به عنوان یک برنامه نویس می توانید به آن نیاز داشته باشید به همراه دارد. برای ارتباط مستقیم با سیستم عامل شما، بسته ای به نام os وجود دارد که عملکردهای مستقل از پلتفرم را ارائه می دهد.

بسته های os و bufio دستکاری فایل های متنی را بسیار ساده می کنند.

اگرچه اکثر توابع بسته OS شبیه یونیکس هستند، اما همه آنها از سبک Go برای مدیریت خطا استفاده می کنند که خواندن پیام های خطا و کد اشکال زدایی را ساده می کند.

مطلب مرتبط:   یک برنامه پایتون برای واکشی داده‌های مربوط به هر کشوری بسازید

بنابراین، چگونه فایل های حاوی متن را در Go دستکاری می کنید؟

نحوه خواندن داده ها از یک فایل متنی

برای خواندن داده‌ها از فایل‌های متنی، باید تابع Open() بسته os را فراخوانی کنید، که نام فایل را می‌پذیرد تا به عنوان پارامتر خوانده شود. روش دیگر برای دریافت فایل استفاده از تابع OpenFile() است.

تفاوت عمده بین Open() و OpenFile() در پیاده سازی آنهاست. Open() یک فایل را در حالت فقط خواندنی باز می کند (با پرچم O_RDONLY)، در حالی که OpenFile() با پذیرش سه پارامتر یعنی:

  • نام فایل
  • حالت باز کردن فایل: حالت های باز فایل معتبر در جدول زیر نشان داده شده است. معنی پرچم O_RDONLY فایل را در حالت فقط خواندنی باز می کند O_WRONLY فایل را در حالت فقط نوشتن باز می کند O_RDWR فایل را در حالت خواندن-نوشتن باز می کند O_APPEND هنگام نوشتن O_CREATE داده ها را به فایل اضافه می کند اگر وجود نداشته باشد فایل جدیدی ایجاد می کند O_EXCL مورد استفاده با O_CREATE، برای نشان دادن اینکه فایل فقط در صورتی باید ایجاد شود که وجود نداشته باشد O_SYNC فایل را برای I/O همزمان باز می کند O_TRUNC در صورت امکان فایل را در حالت باز کوتاه کنید
  • مجوزهای فایل: مانند بیت های مجوز فایل در لینوکس که برای تعیین قوانین دسترسی به فایل استفاده می شود، به عنوان مثال، 0777 برای اعطای مجوزهای خواندن، نوشتن و اجرا به همه انواع کاربر.

پرچم

معنی

O_RDONLY

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

O_WRONLY

فایل را در حالت فقط نوشتن باز می کند

O_RDWR

فایل را در حالت خواندن و نوشتن باز می کند

O_APPEND

هنگام نوشتن داده ها را به فایل اضافه می کند

مطلب مرتبط:   نحوه ایجاد یک ورد شمار در جاوا اسکریپت

O_CREATE

اگر فایلی وجود نداشته باشد، یک فایل جدید ایجاد می کند

O_EXCL

با O_CREATE استفاده می شود، برای نشان دادن اینکه فایل فقط در صورتی باید ایجاد شود که وجود نداشته باشد

O_SYNC

فایل را برای I/O همزمان باز می کند

O_TRUNC

در صورت امکان فایل را در حالت باز کوتاه کنید

کد زیر نحوه خواندن داده ها از یک فایل متنی در Go را با استفاده از os.Open() و Scan() نشان می دهد که در این مورد در یک حلقه Go for اجرا می شود.

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
)

/**
    CONTENT OF THE "testfile.txt" file.
    lorem ipsum dolor sit amet
    LOREM IPSUM DOLOR SIT AMET
    Lorem ipsum dolor sit amet
    Lorem Ipsum Dolor Sit Amet
    lOREM iPSUM dOLOR sIT aMET
    LoReM IpSuM DoLoR SiT AmEt
*/

func main() {
    file, err := os.Open("testfile.txt")

    // another method using os.OpenFile()
    // file, err = os.OpenFile("testfile.txt", os.O_RDONLY, 0644)

    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    fmt.Println("File opened successfully. Now reading file contents line by line:")
    // create scanner from the file to read text from
    scanner := bufio.NewScanner(file)
    // scan or read the bytes of text line by line
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

وقتی کد بالا را با go run filename.go اجرا می کنید، خروجی زیر را تولید می کند:

خروجی برنامه برای خواندن متن از فایل

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

مطلب مرتبط:   چرا باید C++ را یاد بگیرید؟

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

بسته bufio یک رابط Writer بافر را فراهم می کند که بایت های داده را ذخیره می کند و آنها را با کمک یک تابع Flush() در یک فایل می نویسد.

کد نمونه بعدی ادامه کدی برای خواندن یک فایل است. در این مثال، داده ها با استفاده از پرچم های O_WRONLY و O_APPEND روی testfile.txt موجود نوشته می شوند.

خطوط کد زیر را قبل از بسته شدن پرانتز تابع main() به برنامه بالا اضافه کنید:

// write output data to file
file, err = os.OpenFile("testfile.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
    log.Fatal(err)
}
defer file.Close()
fmt.Println("File opened successfully, Now preparing to write data to file...")

// create buffered Writer object to write data to file
textWriter := bufio.NewWriter(file)

// write string to buffer before saving file.
_, err = textWriter.WriteString("-This is a new text added to the file.")
if err != nil {
    log.Fatal(err)
}
textWriter.Flush()
fmt.Println("Data written to file successfully...")

خروجی برنامه کامل شما باید به شکل زیر باشد:

خروجی برنامه برای خواندن و نوشتن در فایل متنی

هنگامی که فایل testfile.txt را باز می کنید، مانند تصویر زیر، خط جدیدی را نیز خواهید دید که در انتهای فایل اضافه شده است:

عملیات نوشتن گلانگ

مدیریت فایل در Go آسان است

Go به شما امکان می دهد با فایل های مختلف کار کنید، نه فقط فایل های متنی. تعداد زیادی کتابخانه داخلی و توابع اضافی برای کار با انواع مختلف داده ها از فایل ها، از جمله JSON و CSV وجود دارد.

برای اینکه ببینید بسته به موقعیت چگونه رفتار متفاوتی دارند، می‌توانید با پرچم‌ها و مجوزهای فایل مختلف که برای استفاده با OpenFile() در دسترس هستند، آزمایش کنید.