不同语言中常用的操作
简要记录一下,以防某一天用时才想着四处寻找 ## 遍历文件 C++
标准库(C++17 及以上)
1 2 3 4 5 6 7 8 9 10 #include <filesystem> #include <iostream> int main () { using namespace std; using namespace std::filesystem; for (auto & i : directory_iterator ("C:\\example" )) { cout << i.path ().string () << endl; } }
Python 有两种标准库中支持的遍历方法: 1. os.walk()
函数(递归遍历所有子孙目录) 该函数返回一个三元元组
(dirpath, dirnames, filenames)
,分别表示根目录、路径下所有的子目录、路径下所有的文件。
1 2 3 4 5 6 import osif __name__ == '__main__' : for dirpath, dirnames, filenames in os.walk('C:\\example' ): for filepath in filenames: print (os.path.join(dirpath, filepath))
2.
os.listdir()
函数 不同于
os.walk()
,该函数仅遍历指定路径下所有的文件以及文件夹,但不会遍历子孙文件夹。
1 2 3 4 5 6 7 import osif __name__ == '__main__' : for entry in os.listdir('C:\\example' ): path: str = os.path.join('C:\\example' , entry) if os.path.isfile(path): print (path)
Go 标准库同样提供了类似于 Python 中的两种方法: 1.
filepath.Walk
- 类似于 Python 中的 os.walk()
函数,递归遍历所有子孙目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package mainimport ( "fmt" "os" "path/filepath" )func main () { var files = make ([]string , 16 ) err := filepath.Walk("C:\\example" , func (path string , info os.FileInfo, err error ) error { if !info.IsDir() { files = append (files, path) } return nil }) if err != nil { panic (err) } for _, file := range files { fmt.Println(file) } }
2.
File.ReadDir
- 类似于 Python 中的
os.listdir()
,只遍历目录下的文件或文件夹,不包含子孙目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package mainimport ( "fmt" "os" "path/filepath" )func main () { cur_path := "C:\\example" f, _ := os.Open(cur_path) files, _ := f.ReadDir(-1 ) err := f.Close() if err != nil { panic (err) } for _, file := range files { if !file.IsDir() { fmt.Println(filepath.Join(cur_path, file.Name())) } } }