在Ruby 3.1.2中根据指定邮箱获取CSV文件中的单行数据
基于Ruby 3.1.2实现按邮箱匹配CSV整行数据
给定如下CSV文件:
make,model,color,doors,email dodge,charger,black,4,practice1@whatever.com ford,focus,blue,5,practice2@whatever.com nissan,350z,black,2,practice3@whatever.com mazda,miata,white,2,practice4@whatever.com honda,civid,brown,4,practice5@whatever.com corvette,stingray,red,2,practice6@whatever.com ford,fiesta,blue,5,practice7@whatever.com bmw,m4,black,2,practice8@whatever.com audi,a5,blue,2,practice9@whatever.com subaru,brz,black,2,practice10@whatever.com lexus,rc,black,2,practice11@whatever.com
以下是两种实现方式,可根据文件大小选择:
方式1:逐行遍历匹配(适合大文件)
无需加载整个文件到内存,内存占用低,适合处理大容量CSV:
require 'csv' # 获取用户输入的目标邮箱 print "请输入要查询的邮箱:" target_email = gets.chomp # 逐行读取CSV并匹配邮箱 CSV.foreach('your_file.csv', headers: true) do |row| if row['email'] == target_email puts row.to_csv.strip exit # 找到匹配项后直接退出,减少不必要的遍历 end end # 未找到匹配时提示 puts "未找到对应邮箱的记录"
方式2:预加载为哈希表(适合小文件)
先将所有记录存入哈希,后续查询更高效,适合数据量较小的CSV:
require 'csv' # 构建邮箱到整行记录的映射 email_map = {} CSV.foreach('your_file.csv', headers: true) do |row| email_map[row['email']] = row.to_csv.strip end # 获取用户输入 print "请输入要查询的邮箱:" target_email = gets.chomp # 查询并输出结果 puts email_map.fetch(target_email, "未找到对应邮箱的记录")
注意事项
- 将代码中的
your_file.csv替换为实际的CSV文件路径 - 若CSV使用非逗号分隔符,可在
CSV.foreach中添加col_sep: '指定分隔符'参数调整 gets.chomp用于去除输入末尾的换行符,避免因格式问题导致匹配失败
内容的提问来源于stack exchange,提问作者burner
相关产品推荐
相关产品推荐

