1. 数据清洗

读取清洗的效率还是挺快的

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "os"
  7. "strings"
  8. "github.com/axgle/mahonia"
  9. )
  10. func main() {
  11. // 1.打开文件
  12. file, _ := os.Open("./kaifang.txt")
  13. defer file.Close()
  14. // 创建优质文件
  15. goodFile, _ := os.OpenFile("./kaifang_good.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
  16. defer goodFile.Close()
  17. // 创建劣质文件
  18. badFile, _ := os.OpenFile("./kaifang_bad.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
  19. defer badFile.Close()
  20. // 2.缓冲读取
  21. reader := bufio.NewReader(file)
  22. for {
  23. lineBytes, _, err := reader.ReadLine()
  24. if err == io.EOF {
  25. break
  26. }
  27. gbkStr := string(lineBytes)
  28. lineStr := ConvertEncoding(gbkStr, "GBK")
  29. // 3.根据行数据,取身份证
  30. fields := strings.Split(lineStr, ",")
  31. // 判断长度大于等于2,下标1的位置长度=18
  32. if len(fields) >= 2 && len(fields[1]) == 18 {
  33. goodFile.WriteString(lineStr + "\n")
  34. fmt.Println("Good:", lineStr)
  35. } else {
  36. badFile.WriteString(lineStr + "\n")
  37. fmt.Println("Bad:", lineStr)
  38. }
  39. }
  40. }
  41. func ConvertEncoding(srcStr string, encoding string) (dstStr string) {
  42. // 创建编码处理器
  43. enc := mahonia.NewDecoder(encoding)
  44. // 编码器处理字符串为utf8的字符串
  45. utfStr := enc.ConvertString(srcStr)
  46. dstStr = utfStr
  47. return
  48. }