In Go, CSV (Comma-Separated Values) files are a common format for storing tabular data. The encoding/csv
package in Go allows you to read and write CSV files efficiently. Below, we'll explain how to read from and write to CSV files in Go.
To read a CSV file in Go, we use the csv.NewReader
function from the encoding/csv
package. This function helps to parse the file line by line.
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// Open the CSV file
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// Create a new CSV reader
reader := csv.NewReader(file)
// Read all records from the CSV file
records, err := reader.ReadAll()
if err != nil {
fmt.Println("Error reading CSV:", err)
return
}
// Print all records
for _, record := range records {
fmt.Println(record) // Each record is a slice of strings
}
}
🔹 Output (assuming data.csv
contains this data):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 In this example:
os.Open
opens the CSV file.csv.NewReader
creates a new CSV reader.reader.ReadAll
reads all the records from the file and returns them as a slice of string slices (where each inner slice is a row from the CSV).To write data to a CSV file in Go, you use the csv.NewWriter
function. This allows you to write individual records (rows) to the file.
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// Create a new CSV file
file, err := os.Create("output.csv")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
// Create a new CSV writer
writer := csv.NewWriter(file)
// Write records (rows) to the CSV file
records := [][]string{
{"Name", "Age", "City"},
{"Alice", "30", "New York"},
{"Bob", "25", "Los Angeles"},
{"Charlie", "35", "Chicago"},
}
for _, record := range records {
err := writer.Write(record)
if err != nil {
fmt.Println("Error writing record:", err)
return
}
}
// Write any buffered data to the file
writer.Flush()
// Check if there was an error during the flush
if err := writer.Error(); err != nil {
fmt.Println("Error flushing writer:", err)
return
}
fmt.Println("CSV file created successfully")
}
🔹 Output (the content of output.csv
):
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
👉 In this example:
os.Create
creates a new CSV file for writing.csv.NewWriter
creates a CSV writer.writer.Write
writes each record (row) to the CSV file.writer.Flush
writes any buffered data to the file and ensures all content is saved.If you want to read a CSV file line by line (instead of reading the entire file at once), you can use csv.Reader.Read
.
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// Open the CSV file
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// Create a new CSV reader
reader := csv.NewReader(file)
// Read CSV line by line
for {
record, err := reader.Read()
if err != nil {
// End of file reached or error
break
}
fmt.Println(record) // Print each record (row)
}
}
🔹 Output (assuming data.csv
contains this data):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 This approach reads each line from the CSV file and processes it one by one.
By default, Go’s CSV package uses a comma ,
as the delimiter, but you can change the delimiter if your file uses a different one (like a semicolon ;
).
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// Open the CSV file
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
// Create a new CSV reader with a custom delimiter
reader := csv.NewReader(file)
reader.Comma = ';' // Set the delimiter to semicolon
// Read all records from the CSV file
records, err := reader.ReadAll()
if err != nil {
fmt.Println("Error reading CSV:", err)
return
}
// Print all records
for _, record := range records {
fmt.Println(record) // Each record is a slice of strings
}
}
🔹 Output (assuming data.csv
has semicolons as delimiters):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 The delimiter is changed to semicolon (;
) using reader.Comma
.
csv.NewReader
to read from a CSV file and Read
or ReadAll
to parse the content.csv.NewWriter
to write records to a CSV file with Write
and Flush
.Read
.reader.Comma
.This makes Go a powerful language for working with CSV files, providing a simple interface for reading and writing tabular data.
Go তে CSV (Comma-Separated Values) ফাইলগুলি একটি সাধারণ ফরম্যাট যা টেবিলার ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়। CSV ফাইলগুলির সাথে কাজ করতে Go এর encoding/csv
প্যাকেজ ব্যবহার করা হয়। এই প্যাকেজটি আপনাকে CSV ফাইল থেকে ডেটা পড়তে এবং লিখতে সাহায্য করে। নিচে আমরা CSV ফাইলের সাথে কাজ করার জন্য প্রয়োজনীয় কিছু উদাহরণ আলোচনা করব।
CSV ফাইল পড়তে, Go তে csv.NewReader
ফাংশনটি ব্যবহার করা হয়। এটি ফাইলটি এক লাইনে এক করে পড়তে সাহায্য করে।
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// CSV ফাইলটি ওপেন করুন
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("ফাইল খুলতে সমস্যা:", err)
return
}
defer file.Close()
// একটি নতুন CSV রিডার তৈরি করুন
reader := csv.NewReader(file)
// CSV ফাইল থেকে সমস্ত রেকর্ড পড়ুন
records, err := reader.ReadAll()
if err != nil {
fmt.Println("CSV পড়তে সমস্যা:", err)
return
}
// সমস্ত রেকর্ড প্রিন্ট করুন
for _, record := range records {
fmt.Println(record) // প্রতিটি রেকর্ড একটি স্ট্রিং স্লাইস
}
}
🔹 আউটপুট (ধরা যাক data.csv
ফাইলের মধ্যে এই ডেটা আছে):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 এই উদাহরণে:
os.Open
ফাইলটি খুলতে ব্যবহার করা হয়।csv.NewReader
একটি নতুন CSV রিডার তৈরি করে।reader.ReadAll
ফাইল থেকে সমস্ত রেকর্ড পড়ে একটি স্ট্রিং স্লাইস আকারে ফেরত দেয়।CSV ফাইলে ডেটা লিখতে, Go তে csv.NewWriter
ফাংশনটি ব্যবহার করা হয়। এটি আপনাকে এক বা একাধিক রেকর্ড (রো) ফাইলটিতে লিখতে সাহায্য করে।
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// একটি নতুন CSV ফাইল তৈরি করুন
file, err := os.Create("output.csv")
if err != nil {
fmt.Println("ফাইল তৈরি করতে সমস্যা:", err)
return
}
defer file.Close()
// একটি নতুন CSV লেখক তৈরি করুন
writer := csv.NewWriter(file)
// CSV ফাইলে রেকর্ড (রো) লিখুন
records := [][]string{
{"Name", "Age", "City"},
{"Alice", "30", "New York"},
{"Bob", "25", "Los Angeles"},
{"Charlie", "35", "Chicago"},
}
for _, record := range records {
err := writer.Write(record)
if err != nil {
fmt.Println("রেকর্ড লিখতে সমস্যা:", err)
return
}
}
// যেকোনো বাফারড ডেটা ফাইলে লিখুন
writer.Flush()
// ফ্লাশের সময় যদি কোনো সমস্যা হয়
if err := writer.Error(); err != nil {
fmt.Println("লেখক ফ্লাশ করতে সমস্যা:", err)
return
}
fmt.Println("CSV ফাইল সফলভাবে তৈরি হয়েছে")
}
🔹 আউটপুট (ধরা যাক output.csv
ফাইলের মধ্যে এই ডেটা থাকবে):
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
👉 এই উদাহরণে:
os.Create
একটি নতুন CSV ফাইল তৈরি করে।csv.NewWriter
একটি CSV লেখক তৈরি করে।writer.Write
প্রতিটি রেকর্ড (রো) ফাইলে লেখে।writer.Flush
যেকোনো বাফারড ডেটা ফাইলে লেখে এবং সবকিছু সংরক্ষিত হয়।যদি আপনি CSV ফাইলটি এক লাইনে এক করে পড়তে চান, তাহলে csv.Reader.Read
ফাংশনটি ব্যবহার করতে পারেন।
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// CSV ফাইলটি ওপেন করুন
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("ফাইল খুলতে সমস্যা:", err)
return
}
defer file.Close()
// একটি নতুন CSV রিডার তৈরি করুন
reader := csv.NewReader(file)
// CSV এক লাইনে এক করে পড়ুন
for {
record, err := reader.Read()
if err != nil {
// ফাইলের শেষে পৌঁছানো বা কোনো ত্রুটি
break
}
fmt.Println(record) // প্রতিটি রেকর্ড (রো) প্রিন্ট করুন
}
}
🔹 আউটপুট (ধরা যাক data.csv
ফাইলের মধ্যে এই ডেটা আছে):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 এই পদ্ধতিতে CSV ফাইলের প্রতিটি লাইন এক করে পড়া হয় এবং প্রসেস করা হয়।
ডিফল্টভাবে, Go এর CSV প্যাকেজ কমা (,
) ডেলিমিটার ব্যবহার করে, তবে আপনি যদি অন্য কোনো ডেলিমিটার (যেমন সেমিকোলন ;
) ব্যবহার করতে চান, তবে আপনি সেটি কনফিগার করতে পারেন।
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
// CSV ফাইলটি ওপেন করুন
file, err := os.Open("data.csv")
if err != nil {
fmt.Println("ফাইল খুলতে সমস্যা:", err)
return
}
defer file.Close()
// একটি নতুন CSV রিডার তৈরি করুন কাস্টম ডেলিমিটার সহ
reader := csv.NewReader(file)
reader.Comma = ';' // সেমিকোলন ডেলিমিটার ব্যবহার করুন
// CSV ফাইল থেকে সমস্ত রেকর্ড পড়ুন
records, err := reader.ReadAll()
if err != nil {
fmt.Println("CSV পড়তে সমস্যা:", err)
return
}
// সমস্ত রেকর্ড প্রিন্ট করুন
for _, record := range records {
fmt.Println(record) // প্রতিটি রেকর্ড একটি স্ট্রিং স্লাইস
}
}
🔹 আউটপুট (ধরা যাক data.csv
ফাইলে সেমিকোলন ডেলিমিটার ব্যবহার করা হয়েছে):
[Name Age City]
[Alice 30 New York]
[Bob 25 Los Angeles]
[Charlie 35 Chicago]
👉 এখানে, reader.Comma = ';'
লাইনটি ব্যবহার করে সেমিকোলন ডেলিমিটার সেট করা হয়েছে।
csv.NewReader
ব্যবহার করে CSV ফাইল পড়া হয় এবং Read
বা ReadAll
দিয়ে ডেটা পার্স করা হয়।csv.NewWriter
ব্যবহার করে CSV ফাইলে রেকর্ড লেখা হয়, Write
এবং Flush
ফাংশনগুলির মাধ্যমে।Read
ব্যবহার করা হয়।reader.Comma
সেট করে কাস্টম ডেলিমিটার ব্যবহার করা যায়।Go তে CSV ফাইলের সাথে কাজ করার জন্য এটি একটি শক্তিশালী এবং সহজ ইন্টারফেস প্রদান করে, যা আপনাকে টেবিলার ডেটা খুব সহজেই পড়তে এবং লিখতে সাহায্য করে।