Go基础--终端操作和文件操作
终端操作
操作终端相关的文件句柄常量
os.Stdin:标准输入
os.Stdout:标准输出
os.Stderr:标准错误输出
关于终端操作的代码例子:
package main import "fmt" var (
firstName,lastName,s string
i int
f float32
input = "56.12/5212/Go"
format = "%f/%d/%s"
) func main() {
fmt.Println("please enter your full name:")
//fmt.Scanln(&firstName,&lastName)
fmt.Scanf("%s %s",&firstName,&lastName) //这一句和上一句是相同的
fmt.Printf("Hi %s %s!\n",firstName,lastName)
fmt.Sscanf(input,format,&f,&i,&s)
fmt.Println("From the string we read:",f,i,s) }
关于带缓冲区的读写
这里需要用到一个包:bufio
下面是代码例子:
package main import (
"bufio"
"os"
"fmt"
) var inputReader *bufio.Reader
var input string
var err error func main(){
inputReader = bufio.NewReader(os.Stdin)
fmt.Println("please enter some input:")
// 下面这个表示我们读取一行,最后是以\n 为分割的,\n表示换行
input,err = inputReader.ReadString('\n')
if err != nil{
fmt.Println(err)
return
}
fmt.Printf("the input was:%s\n",input)
}
练习终端操作
从终端读取一行字符串,统计英文,数字,空格以及其他字符的数量
代码实现:
package main import (
"fmt"
"bufio"
"os"
) func judgeCount(str string){
var countNum, countLetter, countSpace, countOther int
for _, v := range str {
if v >= 'a' && v <= 'z' || v >= 'A' && v <= 'Z' {
countLetter++
} else if v >= '0' && v <= '9' {
countNum++
} else if v == ' ' {
countSpace++
} else {
countOther++
}
}
fmt.Println("英文字母的个数:", countLetter)
fmt.Println("数字的个数:", countNum)
fmt.Println("空格的个数:", countSpace)
// 关于其他字符这里进行减一是因为这里多算了一个换行符\n
fmt.Println("其他字符的个数:", countOther-1) } func main(){
fmt.Println("请输入一行字符串:")
var inputReader *bufio.Reader
inputReader = bufio.NewReader(os.Stdin)
str,err := inputReader.ReadString('\n')
if err!=nil{
fmt.Println("输入错误,错误为:",err)
return
}
judgeCount(str)
}
关于文件读写
os.File封装所有文件相关的操作
打开一个文件进行读操作:os.Open(name string)(*File,error)
关闭一个文件:File.Close()
关于文件操作的一个简单例子:
package main import (
"os"
"fmt"
"bufio"
"io"
) func main(){
file,err:= os.Open("/Users/zhaofan/go_project/src/go_dev/07/ex13/main.go")
if err!= nil{
fmt.Println("open file is err:",err)
return
}
//这里切记在打开文件的时候跟上defer 关闭这个文件,防止最后忘记关闭
defer file.Close()
inputReader := bufio.NewReader(file)
for {
inputString,readError:= inputReader.ReadString('\n')
// 这里readError == io.EOF表示已经读到文件末尾
if readError ==io.EOF{
return
}
// 下面会把每行的内容进行打印
fmt.Printf("the input is:%s",inputString)
} }
上面例子中关于读文件是一行一行的读的,下面我们也可以一次性读完整的文件,但是切记如果文件过大,这种方法不适用,这里用到是io/ioutil包
package main import (
"io/ioutil"
"fmt"
) func main(){
buf,err := ioutil.ReadFile("/Users/zhaofan/go_project/src/go_dev/07/ex13/main.go")
if err != nil{
fmt.Println("read file is err:",err)
return
}
fmt.Printf("%s\n",string(buf)) }
关于读取压缩文件的例子,这里用到的是compress/gzip包
package main import (
"os"
"fmt"
"compress/gzip"
"bufio"
"io"
) func main(){
file,err := os.Open("/Users/zhaofan/go_project/src/go_dev/07/ex6/ggg.gz")
if err != nil{
fmt.Println("open file err:",err)
return
}
defer file.Close() reader,err :=gzip.NewReader(file)
if err != nil{
fmt.Println("gzip err:",err)
return
}
bufReader := bufio.NewReader(reader)
for{
line,err := bufReader.ReadString('\n')
if err != nil{
if err == io.EOF{
break
}
fmt.Println("read file err",err)
break
}
fmt.Printf("%s",line)
} }
关于文件的写入
os.OpenFile("filename",os.O_WRONLY|os.O_CREATE,066)
第一个参数是文件名
第二个参数是文件的打开模式:
os.O_WRONLY:只写
os.O_CREATE:创建文件
os.O_RDONLY:只读
os.O_RDWR:读写
os.O_TRUNC:清空
第三个参数:权限控制
r-->4
w-->2
x-->1
这里和linux的是一样的
关于写入文件的一个例子,这里写了两种方法一种是直接writestring方法,一种是通过bufio的方式:
package main import (
"os"
"fmt"
"bufio"
) func testWriteFile(){
file,err:= os.OpenFile("mylog.txt",os.O_WRONLY|os.O_CREATE,0666)
if err!= nil{
fmt.Println("open file failed:",err)
return
}
defer file.Close()
for i:=0;i<10;i++{
file.WriteString(fmt.Sprintf("go web 开发\n"))
} } func testWriteBuf(){
file,err:= os.OpenFile("mylog.txt",os.O_WRONLY|os.O_CREATE,0666)
if err!= nil{
fmt.Println("open file failed:",err)
return
}
defer file.Close() bufioWrite := bufio.NewWriter(file)
for i:=0;i<10;i++{
bufioWrite.WriteString("hello\n")
}
bufioWrite.Flush()
} func main(){
//testWriteFile()
testWriteBuf()
}
关于拷贝文件的例子:
package main import (
"os"
"io"
) func CopyFile()(writen int64,err error){
src,err:=os.Open("mylog.txt")
if err!= nil{
return
}
defer src.Close()
dst,err := os.OpenFile("dst.txt",os.O_WRONLY|os.O_CREATE,0644)
if err!=nil{
return
}
defer dst.Close()
return io.Copy(dst,src)
} func main(){
CopyFile()
}
关于获取命令行参数
os.Args是一个string的切片,用来存储所有命令行的参数
但是通过这种方式获取参数有点笨拙,并且需要做很多的判断,我们可以通过go里面的flag包来做,代码例子如下:
package main import (
"fmt"
"flag"
) var(
conf string
level int
) func init() {
flag.StringVar(&conf,"c","/home/user/zhaofan","请指定配置文件路径")
flag.IntVar(&level,"l",8,"请指定日志级别")
flag.Parse() //这个非常重要不能忘记写
} func main() {
//for _,val := range os.Args{
// fmt.Println(val)
//} fmt.Printf("conf is :%s\n",conf)
fmt.Printf("level is :%d\n",level)
}
上面的例子设置了默认参数,如果我们想自定义参数在运行的时候添加 -c=内容 -l=内容 ,就可以用我们通过命令行参数传入的值进行处理
Go基础--终端操作和文件操作的更多相关文章
- golang之终端操作,文件操作
终端操作 操作终端相关的文件句柄常量os.Stdin:标准输入os.Stdout:标准输出os.Stderr:标准错误输出 关于终端操作的代码例子: package main import " ...
- python基础之元组、文件操作、编码、函数、变量
1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...
- Python之路:Python 基础(三)-文件操作
操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') # 还有一种方法open 例1.创建文件 f = file('myfile. ...
- Python基础(七)-文件操作
一.文件处理流程 1.打开文件,得到文件句柄赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.基本操作 f = open('zhuoge.txt') #打开文件 first_line = ...
- python基础 (编码进阶,文件操作和深浅copy)
1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从uni ...
- python基础(四)文件操作和集合
一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...
- Py修行路 python基础 (七)文件操作 笔记(随时更改添加)
文件操作流程: 1.打开文件 open() 2.操作文件 read .writeread(n) n对应读指定个数的 2.x中读取的是字节! 3.x中读取的是字符!read 往外读取文件,是以光标位置开 ...
- python基础(三)-- 文件操作
一. 文件操作: 对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 现有文件如下 : Somehow, it seems the love I kn ...
- python3速查参考- python基础 5 -> 常用的文件操作
文件的打开方式 打开方式 详细释义 r 以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb 以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+ 以读写方式打开一个文 ...
随机推荐
- ibatis 批量更新(二)
1.情景展示 oracle数据库中,需要根据指定字段内容调用加密程序后,根据主键id进行更新其对应的字段mindex_id的值: 加密通过Java实现,然后通过Java对其进行更新: Java使用 ...
- 〖Network〗宿舍配置两路由器,同时访问校园内网和校园外网
环境: 校园宿舍, 10.x.x.x 和 172.16.x.x~172.31.x.x是校园内网,本科教务系统什么的都在上边 路由器: 路由器1(校园内网):水星MR807 路由器2(拨号上网):TP ...
- Number of dynamic partitions exceeded hive.exec.max.dynamic.partitions.pernode
动态分区数太大的问题:[Fatal Error] Operator FS_2 (id=2): Number of dynamic partitions exceeded hive.exec.max.d ...
- http://blog.csdn.net/u011277123/article/details/53665302
导读:Oracle中,除Exp命令可进行一般的全库.全用户导出外,还可通过增加相关参数条件实现对部分库表或数据的导出. 测试环境 在如下图的测试环境中,当前登录用户名为“jck”,该用户下有200多张 ...
- 使用VTK与Python实现机械臂三维模型可视化
三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...
- JAVA正确的四舍五入方法
在JDK版本为1.8的情况运行下面的代码,会发现很神奇的情况(见运行结果). 看如下代码: package com.longge.mytest; import java.math.BigDecimal ...
- 3299 有序数组合并求第K大问题
题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入 ...
- 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这 ...
- shell脚本npm构建静态文件
#!/bin/bash cd /data/web source /etc/profile /usr/bin/cnpm i && npm run build cp -r ./dist/* ...
- JavaScript 循环语句入门详解
JavaScript Switch 语句 语法 switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case ...