为了账号安全,请及时绑定邮箱和手机立即绑定

尝试将提取的文件名插入单个文件

尝试将提取的文件名插入单个文件

Go
慕森王 2022-05-18 16:16:51
该程序获取目录名称并在此之后读取目录中的所有文件我正在收集文件的名称并尝试将所有文件名插入一个新文件但我只得到最后一个索引,我想存储所有文件名到单个文件中。package mainimport (    "flag"    "fmt"    "log"    "os"    "regexp")func readCurrentDir(folderpath string) {    file, err := os.Open(folderpath)    if err != nil {        log.Println("failed opening directory: ", err)        os.Exit(1)    }    defer file.Close()    list, _ := file.Readdirnames(0) // 0 to read all files and folders    for _, name := range list {        getDomainFromFile(name)    }}func CreateDomainsFile(domains string) {    filename, err := os.Create("All-Sitemap-Domains.txt")    if err != nil {        log.Println("Error to create txt file", err)    }    defer filename.Close()    writestrings, err := filename.WriteString(domains)    if err != nil {        log.Println("Error to append data into txt file", err)    }    log.Println("Successfully data insetred into txt file")    fmt.Printf("wrote %d bytes\n", writestrings)    filename.Sync()}func getDomainFromFile(PageContent string) {    re := regexp.MustCompile(`(.*)-robots.txt`)    // re := regexp.MustCompile(`Sitemap: (.*)`)    FileToDomain := re.FindAllStringSubmatch(PageContent, -1)    for _, Domain := range FileToDomain {        log.Println(Domain[1])        // log.Println(Domain[1])        fmt.Println("*************************************************************")        CreateDomainsFile(string(Domain[1]))        return    }}func main() {    folder := flag.String("f", "", "Provide the path of the folder")    flag.Parse()    readCurrentDir(*folder)}
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

首先,您可以将所有文件读入一个数组:


// ListFile is delegated to find the files from the given directory, recursively for each dir

func ListFile(path string) []string {

    fileList := []string{}

    // Read all the file recursively

    err := filepath.Walk(path, func(file string, f os.FileInfo, err error) error {

        if IsFile(file) {

            fileList = append(fileList, file)

        }

        return nil

    })

    if err != nil {

        log.Println(err)

        return nil

    }

    return fileList

}

比你可以逐行编写文件:


func writeFile(data []string){

    f, err := os.OpenFile("All-Sitemap-Domains.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

    if err != nil {

        log.Println("Error to create txt file", err)

        return

    }

    defer f.Close()

    for i := range data{

       f.WriteString(data[i]+"\n")        

    }

}


查看完整回答
反对 回复 2022-05-18
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您一次又一次地创建文件,这就是您只获得最后一个值的原因,如果您想插入值,请使用它


文件名,os.O_APPEND|os.O_CREATE|os.O_WRONLY,0644



import (

    "flag"

    "fmt"

    "log"

    "os"

    "regexp"

)


func readCurrentDir(folderpath string) {

    file, err := os.Open(folderpath)

    if err != nil {

        log.Println("failed opening directory: ", err)

        os.Exit(1)

    }

    defer file.Close()


    list, _ := file.Readdirnames(0) // 0 to read all files and folders

    for _, name := range list {

        getDomainFromFile(name)

    }

}



func CreateDomainsFile(domains string) {

    filename, err := os.OpenFile("All-Sitemap-Domains.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)

    if err != nil {

        log.Println("Error to create txt file", err)

    }

    defer filename.Close()

    writestrings, err := filename.WriteString(domains + "\n")

    if err != nil {

        log.Println("Error to append data into txt file", err)

    }

    log.Println("Successfully data insetred into txt file")

    fmt.Printf("wrote %d bytes\n", writestrings)

    filename.Sync()

}


func getDomainFromFile(PageContent string) {

    re := regexp.MustCompile(`(.*)-robots.txt`)

    FileToDomain := re.FindAllStringSubmatch(PageContent, -1)

    for _, Domain := range FileToDomain {

        log.Println(Domain[1])

        fmt.Println("*************************************************************")

        CreateDomainsFile(string(Domain[1]))

        return

    }


}

func main() {

    // http.HandleFunc("/", index_handler)

    // http.HandleFunc("/sitemap_Domains/", showData)

    // fmt.Println("Development Server Started localhost:8081")

    // http.ListenAndServe(":8081", nil)


    folder := flag.String("f", "", "Provide the path of the folder")

    flag.Parse()

    readCurrentDir(*folder)


}


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号