doucong6884 2013-03-25 15:55
浏览 127
已采纳

创建一个较大的csv文件以测试文件访问

I want to create a 10 GB file that looks like:

prefix:username:timestamp, number

So an example is like:

login:jbill:2013/3/25, 1

I want to create a 10GB file, by creating random rows like the one above.

How could I do this in Go?

I can have an array of prefixes like:

login, logout, register

And also an array of usernames:

jbill, dkennedy
  • 写回答

2条回答 默认 最新

  • dongraa1986 2013-03-25 18:35
    关注

    For example,

    package main
    
    import (
        "bufio"
        "fmt"
        "math/rand"
        "os"
        "strconv"
        "time"
    )
    
    func main() {
        fileSize := int64(10e9) // 10GB
        f, err := os.Create("/tmp/largefile")
        if err != nil {
            fmt.Println(err)
            return
        }
        w := bufio.NewWriter(f)
        prefixes := []string{"login", "logout", "register"}
        names := []string{"jbill", "dkennedy"}
        timeStart := time.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC)
        timeDur := timeStart.AddDate(1, 0, 0).Sub(timeStart)
        rand.Seed(time.Now().UnixNano())
        size := int64(0)
        for size < fileSize {
            // prefix:username:timestamp, number
            // login:jbill:2012/3/25, 1
            prefix := prefixes[int(rand.Int31n(int32(len(prefixes))))]
            name := names[int(rand.Int31n(int32(len(names))))]
            time := timeStart.Add(time.Duration(rand.Int63n(int64(timeDur)))).Format("2006/1/2")
            number := strconv.Itoa(int(rand.Int31n(100) + 1))
            line := prefix + ":" + name + ":" + time + ", " + number + "
    "
            n, err := w.WriteString(line)
            if err != nil {
                fmt.Println(n, err)
                return
            }
            size += int64(len(line))
        }
        err = w.Flush()
        if err != nil {
            fmt.Println(err)
            return
        }
        err = f.Close()
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println("Size:", size)
    }
    

    Output:

    register:jbill:2012/8/24, 15
    login:jbill:2012/10/7, 98
    register:dkennedy:2012/8/29, 70
    register:jbill:2012/6/1, 89
    register:jbill:2012/5/24, 63
    login:dkennedy:2012/3/29, 48
    logout:jbill:2012/7/8, 93
    logout:dkennedy:2012/1/12, 74
    login:jbill:2012/4/12, 14
    login:jbill:2012/2/5, 83
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)