作为入门,我们将会学习一些基本的I/O操作,如果需要其他更高级的操作可以参考官方文档。
标准输入输出
也就是从屏幕读入或者从屏幕输出。
输出很简单,就是我们一直在使用的print,我就不举例了。
输入的话,主要是input,之前python2.x还有input_raw,但是python3已经把它删掉了,所以我们就只说input
input的参数是我们需要显示给用户的提示信息。
而用户的输入会作为input返回值从而被获取。
举个简单的例子:
name=input("您的名字是什么?")
print("您的名字是:",name)
打开和关闭文件
上面说了标准输入输出,接下来我们要开始学习对文件的读写了。
open函数
顾名思义,是用来打开一个文件的函数。
opne函数一共有三个参数:
第一个是我们要打开的文件的路径
第二个是我们要打开的方式(与C语言比较类似,稍后会讲解)
第三个是缓冲区大小,如果缺省或者设置为负值会采用系统默认的缓冲区大小,如果是正数,那这个数就是缓冲区的大小,如果是0,则不缓冲。
我们先举个例子:
fi=open("D:\\cgg.txt","r")
fi=open("D:\\cgg.txt","r",10)
下面我们来详细说一下参数。
第一个参数没有什么好说的,只需要提一点,那就是如果要读取的文件和程序在同一个路径下,只要写文件名即可,不需要写出完整的路径,否则需要写完整。
第二个参数是用来表示这个流的性质。有的如下表:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
当然了,你并不需要把这个背下来(除非你要考试)。
需要用的时候查一下就好了。把几个常用的记下就好。
我们可以对上面这个表做一下简单的整理:
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
File的属性
我们上面的那个例子,实际上是用open创建了一个file对象,那么file有什么属性呢?
file一共有四个属性:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
我们可以举个例子:
fi=open("D:\\cgg.txt","r")
print(fi.closed)
print(fi.mode)
print(fi.name)
输出结果如下:False r D:\cgg.txt(换行略去)
这三个属性应该是比较好理解的,我就不多说了。
close方法
如字面意思,是用它关闭文件的,把缓冲区里剩下的数据写入内存,或者写入硬盘。
使用也很简单:
fi=open("D:\\cgg.txt","r")
print(fi.closed)
fi.close()
print(fi.closed)
运行结果:false true
读写文件
我们不可能只是打开和关闭文件,我们肯定要读取或者写入数据,所以我们就来学习一下读写的方法。
write方法
write可以将字符串写入文件。
我们举个例子:
fi=open("D:\\cgg.txt","w")
fi.write("cgg")
fi.close()
这里就成功地把cgg写入了cgg.txt
read方法
read用来从文件中读取字符串。
它有一个可以缺省的参数,用来指定读取的字节数。
如果缺省,它会读尽可能多的数据,可能直到文件结束。
举个例子:
fi=open("D:\\cgg.txt","w")
fi.write("cgg")
fi.close()
fi=open("D:\\cgg.txt","r")
gcg=fi.read()
print(gcg)
这样我们就成功的把我们之前写入的cgg又读取出来了。
文件定位
我们直到,我们在打字的时候,或者说像我此时此刻在打blog一样,我们屏幕上会闪烁着光标,来表示我们接下来的输入的位置。读取或写入文件也是一样,我们也需要直到,我们当前的”光标“在哪,甚至必要的时候对它进行必要的操作。
tell方法
tell方法可以告诉我们,我们的”光标“在距离文件开头多少字节的位置,比如:
fi=open("D:\\cgg.txt","w")
fi.write("cgg")
print(fi.tell())
fi.close()
运行结果是3
seek方法
seek是帮助我们改变光标位置的方法。
它有两个参数
第一个是偏移量,也就是我们要移动多少字节。
第二个是参考位置,它有三种标号,0是从文件开始处,1表示从当前位置,2表示从文件末尾。
我们举个例子:
fi=open("D:\\cgg.txt","w")
fi.write("cgg")
fi.seek(2,0)
fi.write("ggc")
fi.close()
fi=open("D:\\cgg.txt","r")
gcg=fi.read()
print(gcg)
运行结果是::cgggc
重命名和删除文件
对文件进行读写是不需要什么模块的,但当我们想对文件进行一些操作时,我们就需要一些模块的帮助了。
我们今天要用的就是os模块,它可以帮助我们重命名或删除文件。
rename方法
rename是用来重命名的函数,它有两个参数,一个是以前的名字,一个是要改成的名字。
我们看个例子:
import os
os.rename("D:\\cgg.txt","D:\\ggc.txt")
这样,文件就从cgg变成了ggc
remove方法
这个方法,只有一个参数,就是要删除的文件。
例子如下:
os.remove("D:\\ggc.txt")
这样就ok了。
python对目录的操作
我们除了可以操作文件,我们也可以操作文件夹。
mkdir方法
依然是在os模块下,他只有一个参数,就是要创建的目录的名字和路径。
比如:
os.mkdir("D:\\cggggc")
chdir方法
这个方法是用来改变当前目录。
什么意思?
还记得之前我说的吗?如果文件不在当前目录下,就需要写出完整的路径
而这个方法就是用来设置当前目录的。
比如:
os.chdir("D:\\")
os.mkdir("cggggc")
这两个语句和上面mkdir的例子是等价的。
getcwd方法
既然有改变当前目录的方法,肯定有获取当前目录的方法,这就是getcwd:
os.chdir("D:\\")
print(os.getcwd())
这个运行结果就是输出D盘
rmdir方法
既然有了新建目录,肯定也可以删除。
这就是rmdir做的:
os.rmdir("cggggc")
那么今天的学习基本就结束了,更多的方法和函数我们以后有时间再学习。