Golang为别人写的csv文件处理的例子
来源:互联网 发布:c ide推荐 知乎 编辑:程序博客网 时间:2024/06/11 07:53
package mainimport ( "encoding/csv" "flag" "io" "log" "os" "sort" "strings")var quick, first, unrepeat boolfunc main() { path := flag.String("p", "", "-p 指定csv文件路径") logname := flag.String("l", "", "-l 指定结果输出路径,不指定则输出到标准输出") flag.BoolVar(&quick, "q", false, "-q 数据全部加载到内存中处理,默认是少量数据加载到内存操作,bool值") flag.BoolVar(&first, "f", false, "-f 使用首次遇到的一条数据,默认是使用最后遇到的一条数据,bool值") flag.BoolVar(&unrepeat, "u", false, "-u 默认是使用重复数据,bool值") flag.Parse() if *logname != "" { File, err := os.Create(*logname) if err != nil { log.Println("创建输出文件失败:", err.Error()) return } log.SetOutput(File) } if *path == "" { flag.Usage() return } Read(*path)}func Read(path string) { File, err := os.Open(path) if err != nil { log.Println("读取csv文件失败,错误信息:", err.Error()) return } defer File.Close() csvr := csv.NewReader(File) if quick { QMerge(csvr) } else { list := SMerge(csvr, File) FromLineRead(list, path) }}func QMerge(r *csv.Reader) { var m = make(map[string][]string) var list []string var repeat []string r.Read() var err error var key string for { list, err = r.Read() if err != nil { if err != io.EOF { log.Println("读取文件内容失败,错误信息:", err.Error()) } break } if len(list) != 5 { log.Println("无效数据:", list) continue } key = strings.TrimSpace(list[1] + list[3]) if key != "" { if _, ok := m[key]; ok { repeat = append(repeat, key) if !first { m[key] = list } } else { m[key] = list } } } for _, value := range repeat { if unrepeat { delete(m, value) } else { log.Println(m[value]) } } if unrepeat { for _, value := range m { log.Println(value) } }}func SMerge(r *csv.Reader, seek io.Seeker) []int { var m = make(map[string]int) var list []string var repeat []string r.Read() var key string var err error var line int for { list, err = r.Read() if err != nil { if err != io.EOF { log.Println("读取文件内容失败,错误信息:", err.Error()) } break } if len(list) != 5 { log.Println("无效数据:", list) line++ continue } key = strings.TrimSpace(list[1] + list[3]) if key != "" { if _, ok := m[key]; ok { repeat = append(repeat, key) if !first { m[key] = line } } else { m[key] = line } } line++ } var lines = make([]int, 0, len(m)) for _, v := range repeat { if unrepeat { delete(m, v) } else { lines = append(lines, m[v]) } } if unrepeat { for _, v := range m { lines = append(lines, v) } } sort.Ints(lines) return lines}func FromLineRead(lines []int, path string) { File, err := os.Open(path) if err != nil { log.Println("读取csv文件失败:", err.Error()) return } defer File.Close() r := csv.NewReader(File) r.Read() var list []string var line, index int for { list, err = r.Read() if err != nil { if err != io.EOF { log.Println("读取文件内容失败,错误信息:", err.Error()) } break } if lines[index] == line { log.Println(list) index++ if index >= len(lines) { break } } line++ }}
1 0
- Golang为别人写的csv文件处理的例子
- CSV文件的转义处理
- CSV文件的转义处理
- 用C#写的读写CSV文件
- 自己写的导出CSV文件
- 用C#写的读写CSV文件
- OpenCV下的CSV文件读、写
- 自己写的简单csv文件下载
- 分享一个别人写的sqlite3使用总结的例子
- 利用python的csv库处理csv文件
- golang websocket的例子
- 导出为CSV文件的类
- 导入以csv为后缀的文件
- python对csv文件的处理
- python对CSV、Excel文件的处理
- 别人写的双链表
- 别人写的
- 别人写的有关处理时间个接近的程序
- 欢迎使用CSDN-markdown编辑器
- mvn compile error : try-with-resources is not supported in -source 1.5
- Access 转 SQLite 注意事项
- 数据库索引的作用以及优缺点分析
- xcode创建一个工程的多个target,应对不同的环境
- Golang为别人写的csv文件处理的例子
- Android 在 SElinux下 如何获得对一个内核节点的访问权限
- Thinkphp中的A 函数(Thinkphp3.2.3版本)
- Android Studio 设置 sublime 主题
- 手把手教你实现SVM算法(一)
- jsp基本语法
- 59888
- 记一次解决mysql进程数居高不下的问题
- http://www.52im.net/thread-258-1-1.html