Hôm nay, bạn sẽ học cách đọc và ghi tệp trong Ruby để bạn có thể trích xuất nội dung, tạo tệp mới và tìm thông tin bạn cần!
Đây là những gì chúng tôi sẽ đề cập đến :
Nội dung
- 1 Cách đọc tệp trong Ruby
- 2 Cách ghi vào tệp trong Ruby
- 3 Phương thức Tệp Ruby
- 4 Hoạt động Thư mục
- 5 Cách sử dụng Mô-đun FileUtils
- 6 Tóm tắt
- 6.1 Có liên quan
Hãy làm điều này!
Cách đọc tệp trong Ruby
Bạn có thể đọc một tệp trong Ruby như thế này:
- Mở tệp , với
open
phương pháp. - Đọc tệp , toàn bộ tệp, từng dòng hoặc một lượng byte cụ thể.
- Đóng tệp , với
close
phương pháp.
Đây là quy trình chi tiết.
Sử dụng File
lớp để mở tệp:
file =File.open ("users.txt")
Kết quả là bạn sẽ nhận được một File
đối tượng, nhưng chưa phải là nội dung của tệp.
Bây giờ :
Bạn có thể đọc nội dung của tệp theo ba cách.
Trước tiên, bạn có thể đọc toàn bộ tệp.
Như thế này :
file_data =file.read # "user1 \ nuser2 \ nuser3 \ n"
Nếu bạn đang làm việc với một tệp có nhiều dòng, bạn có thể split
file_data
hoặc sử dụng readlines
phương thức cộng với chomp
để xóa các ký tự dòng mới.
Ví dụ :
file_data =file.readlines.map (&:chomp) # ["user1", "user2", "user3"]
Khi bạn làm việc xong với một tệp mà bạn muốn close
nó để giải phóng bộ nhớ và tài nguyên hệ thống.
Như thế này :
file.close
Như một giải pháp thay thế cho việc phải mở và đóng tệp , bạn có thể sử dụng File.read
phương pháp:
file_data =File.read ("user.txt"). split # ["user1", "user2", "user3"]
Một mẹo nữa khi đọc tệp.
Nếu bạn muốn xử lý tệp từng dòng một, bạn có thể sử dụng foreach
phương pháp.
Ví dụ :
File.foreach ("users.txt") {| line | đặt dòng}
Thay vì đọc toàn bộ tệp vào bộ nhớ bạn sẽ có thể xử lý tệp một dòng tại một thời điểm, điều này rất hữu ích cho các tệp lớn.
Cách ghi vào tệp trong Ruby
Nếu bạn muốn ghi vào tệp bằng Ruby:
- Mở tệp ở chế độ ghi (cờ “w”)
- Sử dụng
write
phương pháp thêm dữ liệu vào tệp - Nếu bạn không sử dụng phiên bản chặn, hãy nhớ
close
Ví dụ :
File.open ("log.txt", "w") {| f | f.write "# {Time.now} - Người dùng đã đăng nhập \ n"}
Quan trọng :
Thao tác này sẽ viết lại nội dung tệp trước đó!
Nếu bạn muốn thêm nội dung mới vào tệp, hãy sử dụng cờ “a” (nối thêm), thay vì cờ “w” (ghi).
Một phím tắt là sử dụng File.write
:
File.write ("log.txt", "data ...")
Để sử dụng phương pháp này trong chế độ nối thêm :
File.write ("log.txt", "data ...", mode:"a")
Đó là cách dễ nhất để ghi vào một tệp trong Ruby chỉ bằng một dòng mã 🙂
Một điều nữa…
Nếu bạn muốn ghi một mảng vào một tệp, trước tiên bạn sẽ phải chuyển đổi nó thành một chuỗi.
Đây là cách thực hiện :
File.write ("log.txt", [1,2,3] .join ("\ n"), chế độ:"a")
Quá trình chuyển đổi một đối tượng thành một chuỗi được gọi là tuần tự hóa.
Phương thức tệp Ruby
Bạn có thể làm những việc khác với tệp, ngoài việc đọc và ghi vào chúng.
Ví dụ: bạn có thể muốn biết liệu tệp có tồn tại hay không hoặc để lấy danh sách các tệp cho thư mục hiện tại.
Bạn sẽ sử dụng các phương pháp như :
- đổi tên
- kích thước
- tồn tại?
- tên máy lẻ
- tên cơ sở
- dirname
- thư mục?
- tệp?
Hãy xem một vài ví dụ :
# Đổi tên fileFile.rename ("old-name.txt", "new-name.txt") # Kích thước tệp bằng byteFile.size ("users.txt") # Tệp này đã tồn tại chưa? File.exists ? ("log.txt") # Lấy phần mở rộng tệp, điều này hoạt động ngay cả khi tệp không tồn tạiFile.extname ("users.txt") # => ".txt" # Lấy tên tệp mà không có thư mục partFile. basename ("/ tmp / ebook.pdf") # => "ebook.pdf" # Lấy đường dẫn cho tệp này, không có tên tệpFile.dirname ("/ tmp / ebook.pdf") # => "/ tmp" # Đây thực sự là một tệp hay một thư mục? File.directory? ("Mèo")
Ví dụ cuối cùng có ý nghĩa hơn nếu bạn đang xem qua nội dung của một danh sách thư mục.
def find_files_in_current_directory entry =Dir.entries (".") entry.reject {| entry | File.directory?(entry)} end
Bạn cũng có thể nhận số liệu thống kê cho một tệp, như kích thước tệp, quyền, ngày tạo, v.v.:
File.stat ("/ tmp")
Hoạt động thư mục
Sử dụng Dir.glob bạn có thể nhận được danh sách tất cả các tệp phù hợp với một mẫu nhất định.
Dưới đây là một số ví dụ:
# Tất cả các tệp trong thư mục hiện tạiDir.glob ("*") # Tất cả các tệp có chứa "spec" trong tênDir.glob ("* spec *") # Tất cả các tệp rubyDir.glob ("*. rb")Một dòng mã này sẽ liệt kê đệ quy tất cả các tệp trong Ruby, bắt đầu từ thư mục hiện tại :
Dir.glob ("** / **")Sử dụng điều này nếu bạn chỉ muốn tìm kiếm các thư mục:
Dir.glob ("** / ** /")Sử dụng lớp Dir, bạn cũng có thể in thư mục làm việc hiện tại :
Dir.pwdKiểm tra xem thư mục có trống không:
Dir.empty? ("/ tmp") # falseKiểm tra xem thư mục có tồn tại không:
Dir.exists? ("/ home / jesus") # trueTạo một thư mục mới:
Dir.mkdir ("/ tmp / testing")Tạo một thư mục tạm thời với mktmpdir:
Dir.mktmpdir do | dir | File.write (dir + "/log.txt", "test") endCách sử dụng Mô-đun FileUtils
Có một số tiện ích xử lý tệp bổ sung mà bạn có thể truy cập trong mô-đun FileUtils.
Ví dụ:bạn có thể so sánh các tệp , chạm vào tệp (để cập nhật lần truy cập và sửa đổi cuối cùng ) hoặc sao chép tệp &thư mục bằng cp_r .
Như thế này :
request 'fileutils'FileUtils.compare_file ("a.txt", "b.txt") FileUtils.touch ("/ tmp / lock") FileUtils.cp_r ("dữ liệu", "sao lưu")Btw chữ “r” trong
cp_r
là viết tắt của “recursive”.Tóm tắt
Bạn đã học cách quản lý tệp &thư mục trong Ruby bằng các phương pháp tích hợp sẵn như
File.read
&File.write
.Cảm ơn vì đã đọc!