通常我們處理檔案都是用python+pandas,確實很香。但是今天突然有人找我用go寫乙個合併兩個csv檔案的,需要將兩個csv按id進行合併,大致如下圖
思路很簡單,先讀入兩個csv檔案,然後遍歷比較id,如果相同就把另乙個檔案的內容加到第乙個中。然後建立merge.csv,將上一步得到的資料寫入csv即可。
**部分
package main
import (
"encoding/csv"
"log"
"os"
"fmt"
)func join(filename1 string, filename2 string) (row string)
fs2, _ 程式設計客棧:= os.open(filename2)
r2 := csv.newreader(fs2)
content2, err := r2.readall()
if err != nil
row = make(string, len(content1[1:]))
for i, row1 := range content1[1:]
} }return
}fu程式設計客棧nc edit(filename string, row string)
defer f.close()
//防止亂碼
f.writestring("\xef\xbb\xbf")
w := csv.newwriter(f)
w.write(string)
w.writeall(row)
w.flush()
}func main()
對於小資料量這樣是沒有問題,但是一旦資料量增大,不僅讀取的記憶體占用增加,而且遍歷比較會很消耗時間。所以優化的話我們可以以行讀取,並且想辦法使用go的goroutine來增加速度。唉,太久沒怎麼寫go了,一開始切片都有點忘了。
Go實現合併兩個有序列表(leetcode 21)
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 如下 definition for singly linked list.type listnode struct func mergetwo...
go合併兩個有序列表
題目 將兩個有序鍊錶合併為乙個新的有續鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點做成的。思路 1 如果給定的兩條鍊錶中有一條為空,返回另一條即可 2 若兩條鍊錶都不為空,則在兩條鍊錶中選擇較小的節點作為head,被選中的較小節點所在鍊錶的第二個節點便成了二當家帶領這條鍊錶 3 二當家帶領著...
實現兩個物件的深度合併
es6新增的object.assign 方法只會合併替換物件的第一層key,對於多層的,會當做值處理。比如 let obj1 let obj2 object.assign obj1,obj2 console.log json.stringify obj1 view code 而我想要的結果是 在這裡...