模式
使用open方法来打开一个文件,可以使用适当的模式打开一个文件,比如读,写,追加等。常见模式如下:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
读取文件内容
我们新建一个文本文件,在其中随意输入几行内容,然后写代码读取这个文件的内容。
test.txt文件内容如下:
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
ccccc
ddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
读取文件内容代码如下:
file = open("C:\\Users\\Administrator\\Desktop\\qqqq.txt","r+")
s = file.read()
print(s)
file.close()
read方法,会读取文件所有的内容,执行输出如下:
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbb
ccccc
ddddddddddddddddddd
eeeeeeeeeeeeeeeeeeeeeee
我们也可以一行一行的读取文件,如下:
file = open("C:\\Users\\Administrator\\Desktop\\test.txt","r+")
s = file.readline()
while s != "":
print(s,end="")
s = file.readline()
file.close()
还有更简单的方法,像下面这样:
file = open("C:\\Users\\Administrator\\Desktop\\test.txt","r+")
for line in file:
print(line,end="")
file.close()
输出结果完全一致。
写文件
使用write方法,可以把内容写入到文件。需要注意的就是,文件对象的当前位置,也就是也就是从文件开始到当前位置的字节数,可以使用tell函数来获得这个位置,代码如下:
file = open("C:\\Users\\Administrator\\Desktop\\test.txt","w+")
print(file.tell())
输出如下:
0
可以看到,打开一个文件,位置处于0的位置,也就是说,我们现在如果向文件中写入内容,就会从0的位置开始写。如果0的位置有数据,那么就会别覆盖。如果不想被覆盖,而是要追加内容,就需要指定文件位置到文件末尾,使用seek方法。seek方法介绍:
- seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
- seek(x,1) : 表示从当前位置往后移动x个字符
seek(-x,2):表示从文件的结尾往前移动x个字符
追加内容,代码如下:
file = open("C:\\Users\\Administrator\\Desktop\\test.txt","r+")
file.seek(0,2)
file.write("fffff\n")
打开文件,可以看到,内容已经追加到文件的末尾。我们也可以直接使用a(追加)模式直接写入内容,像下面这样:
file = open("C:\\Users\\Administrator\\Desktop\\test.txt","a")
file.write("fffff\n")
文件的读写就简单的介绍这些,其他的模式可以自行尝试。
os模块
os 模块提供了非常丰富的方法用来处理文件和目录,下面我们就用一个例子来介绍一下os模块的使用,这个例子就找出一个目录下(包括子目录)所有的excel文件,代码如下:
#导入os模块
import os
path = "E:\\gamesrc\\Server\\resource"
def findAllExcel(path):
#listdir,目录下所有文件
files = os.listdir(path)
for filename in files:
#得到文件的绝对目录
filepath = os.path.join(path,filename)
#文件是否一个目录
if os.path.isdir(filepath):
findAllExcel(filepath)
else:
#文件是否Excel文件
if filename.endswith("xlsx"):
print(filepath)
findAllExcel(path)
输出结果如下:
E:\gamesrc\Server\resource\solider\soliderEvolution.xlsx
E:\gamesrc\Server\resource\solider\soliderExchange.xlsx
E:\gamesrc\Server\resource\solider\soliderExplain.xlsx
E:\gamesrc\Server\resource\solider\soliderRecruit.xlsx
E:\gamesrc\Server\resource\solider\soliderShop.xlsx
E:\gamesrc\Server\resource\solider\soliderUpgrade.xlsx
E:\gamesrc\Server\resource\string.xlsx
E:\gamesrc\Server\resource\template\mail.xlsx
E:\gamesrc\Server\resource\title\title.xlsx
E:\gamesrc\Server\resource\trade\TradeAuction.xlsx
E:\gamesrc\Server\resource\trade\TradeShop.xlsx
E:\gamesrc\Server\resource\union\boss\unionboss.xlsx
E:\gamesrc\Server\resource\union\union.xlsx
E:\gamesrc\Server\resource\union\unionLanguage.xlsx
E:\gamesrc\Server\resource\vip\vipConfig.xlsx
.........
这里用到几个常用的方法,os还有很多方法可用,比如修改文件权限,创建文件和目录等等的操作。为了简单起见,就不一一列举了。