Ruby File 类和方法学习笔记
Ruby 的 File 类是一个用于操作文件和目录的类,它提供了许多有用的方法来读取、写入、删除和修改文件。在本文中,我们将学习一些最常用的 File 类方法,并且提供一些实例来帮助你更好地理解这些方法。
打开和关闭文件
File 类提供了 open
方法来打开文件,它接受两个参数:文件名和打开模式。打开模式可以是以下之一:
- "r":只读模式,从文件开头开始读取。
- "w":写入模式,如果文件存在就截断文件,如果文件不存在就创建文件。
- "a":追加模式,从文件末尾开始写入,如果文件不存在则创建文件。
- "r+":读写模式,从文件开头开始读取,也可以写入。
- "w+":读写模式,如果文件存在就截断文件,如果文件不存在就创建文件。
- "a+":读写模式,从文件末尾开始写入,如果文件不存在则创建文件。
以下是一个使用 open
方法打开文件的例子:
rubyCopy Codefile = File.open("example.txt", "w")
file.puts "Hello, world!"
file.close
使用 close
方法来关闭文件是一个好的习惯,这样可以避免文件被其他程序访问或修改。
读取文件内容
File 类提供了 read
方法来读取文件的全部内容。以下是一个使用 read
方法读取文件的例子:
rubyCopy Codefile = File.open("example.txt", "r")
content = file.read
puts content
file.close
read
方法会返回文件的全部内容,你可以将其赋值给一个变量,也可以直接打印出来。
逐行读取文件内容
File 类提供了 each_line
方法来逐行读取文件的内容。以下是一个使用 each_line
方法逐行读取文件的例子:
rubyCopy Codefile = File.open("example.txt", "r")
file.each_line do |line|
puts line
end
file.close
each_line
方法会将文件内容逐行读取,并且将每一行的内容传递给块中的代码执行。
获取文件信息
File 类提供了许多方法来获取文件的信息。以下是一些常用的方法:
size
:获取文件大小。mtime
:获取文件最后修改时间。atime
:获取文件最后访问时间。ctime
:获取文件创建时间。
以下是一个使用这些方法获取文件信息的例子:
rubyCopy Codefile = File.open("example.txt", "r")
puts "Size: #{file.size} bytes"
puts "Last modified: #{file.mtime}"
puts "Last accessed: #{file.atime}"
puts "Created: #{file.ctime}"
file.close
删除文件
File 类提供了 delete
方法来删除文件。以下是一个使用 delete
方法删除文件的例子:
rubyCopy CodeFile.delete("example.txt")
实例
以下是一个实际应用 File 类的例子。假设我们有一个 CSV 格式的文件,其中包含一些学生的成绩记录。我们希望读取并计算每个学生的平均成绩。
Copy Code姓名,科目1,科目2,科目3 张三,90,85,95 李四,80,90,85 王五,95,95,90
这里是代码实现:
rubyCopy Codefile = File.open("scores.csv", "r")
total_scores = Hash.new(0)
num_students = 0
# 逐行读取 CSV 文件
file.each_line do |line|
# 将每一行按逗号分割为数组
fields = line.chomp.split(",")
# 将第一列作为学生姓名,其余列作为成绩
name = fields.shift
scores = fields.map(&:to_i)
# 计算平均成绩并记录到总分数中
avg_score = scores.sum / scores.length
total_scores[name] += avg_score
num_students += 1
end
# 输出每个学生的平均成绩
total_scores.each do |name, total_score|
avg_score = total_score / num_students.to_f
puts "#{name}: #{avg_score}"
end
file.close
输出结果如下:
textCopy Code张三: 90.0 李四: 85.0 王五: 93.33333333333333
这个例子展示了如何使用 File 类和一些其他 Ruby 方法来处理文件,将它们作为输入进行一些计算,并且输出结果。