1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
package main
import ( "container/list" "encoding/csv" "encoding/json" "fmt" "io/ioutil" "os" )
type Data struct { Date string `json:"date"` Author string `json:"author"` Email string `json:"email"` ItAssets map[string]ItAssets `json:"itAssets"` }
type ItAssets struct { Address string `json:"位置"` Department string `json:"部门"` Leader string `json:"负责人"` IPAddress string `json:"IP地址"` System string `json:"系统名称"` Remark string `json:"备注"` Plan string `json:"整改方案"` }
func main() { jsonFile, err := os.Open("data.json") if err != nil { fmt.Println("error opening json file") return }
defer func(jsonFile *os.File) { err := jsonFile.Close() if err != nil { fmt.Println("error closing json file") } }(jsonFile)
jsonData, err := ioutil.ReadAll(jsonFile) if err != nil { fmt.Println("error reading json file") return }
var data Data err = json.Unmarshal(jsonData, &data) if err != nil { fmt.Println("error unmarshalling json data") return }
var cvslist list.List files, _ := os.ReadDir("./扫描报告") for _, file := range files { fileName := file.Name() fileName = fileName[:len(fileName)-4] if _, ok := data.ItAssets[fileName]; ok { var report []byte report, err = json.Marshal(data.ItAssets[fileName]) cvslist.PushBack(string(report)) fmt.Println(string(report)) if _, err := os.Stat("./扫描报告/" + data.ItAssets[fileName].Department + "/" + data.ItAssets[fileName].Leader + "/" + data.ItAssets[fileName].System); os.IsNotExist(err) { err := os.MkdirAll("./扫描报告/"+data.ItAssets[fileName].Department+"/"+data.ItAssets[fileName].Leader+"/"+data.ItAssets[fileName].System, os.ModePerm) if err != nil { return } } err = os.Rename("./扫描报告/"+file.Name(), "./扫描报告/"+string(data.ItAssets[fileName].Department)+"/"+string(data.ItAssets[fileName].Leader)+"/"+string(data.ItAssets[fileName].System)+"/"+file.Name()) if err != nil { fmt.Println(err) } } else { if fileName == ".DS_S" { fmt.Println("文件名为.DS_S") } else { fmt.Println(fileName) if _, err := os.Stat("./扫描报告/无法核实"); os.IsNotExist(err) { err := os.MkdirAll("./扫描报告/无法核实", os.ModePerm) if err != nil { return } } err = os.Rename("./扫描报告/"+file.Name(), "./扫描报告/无法核实/"+file.Name()) if err != nil { fmt.Println(err) } cvslist.PushBack("{\"位置\":\"\",\"部门\":\"\",\"负责人\":\"\",\"IP地址\":\"" + fileName + "\",\"系统名称\":\"\",\"备注\":\"\",\"整改方案\":\"\"}") } } }
csvFile, err := os.Create("./扫描报告.csv") if err != nil { fmt.Println(err) return } defer csvFile.Close()
csvFile.WriteString("\xEF\xBB\xBF") csvWriter := csv.NewWriter(csvFile) csvWriter.Write([]string{"位置", "部门", "负责人", "IP地址", "系统名称", "备注", "整改方案"}) for e := cvslist.Front(); e != nil; e = e.Next() { var data02 ItAssets err := json.Unmarshal([]byte(e.Value.(string)), &data02) if err != nil { fmt.Println(err) return }
csvWriter.Write([]string{data02.Address, data02.Department, data02.Leader, data02.IPAddress, data02.System, data02.Remark, data02.Plan}) } csvWriter.Flush()
}
|