Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách đọc và ghi tệp trong Ruby (Có ví dụ)

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!

Cách đọc và ghi tệp trong Ruby (Có ví dụ)

Đâ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:

  1. Mở tệp , với open phương pháp.
  2. Đọc tệp , toàn bộ tệp, từng dòng hoặc một lượng byte cụ thể.
  3. Đó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:

  1. Mở tệp ở chế độ ghi (cờ “w”)
  2. Sử dụng write phương pháp thêm dữ liệu vào tệp
  3. 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.pwd 

Kiểm tra xem thư mục có trống không:

 Dir.empty? ("/ tmp") # false 

Kiểm tra xem thư mục có tồn tại không:

 Dir.exists? ("/ home / jesus") # true 

Tạ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") end 

Cá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!