一.打开——open
open函数
(1)第一个参数是要打开的文件名(文件名区分大小写)
如果文件存在,返回文件操作对象
如果文件不存在,会抛出异常
(2)第二个参数为读取方式
纯文本文件读取方式:r/r+,w/w+,a/a+
非纯文本文件的读取方式:rb,rb+,wb,wb+,ab,ab+
文件打开模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
二.操作
(1)读取文件(纯文本文件)
read()方法:一次性读如并返回文件的所有内容
特点:读取整个文件,将文件内容放到一个字符串变量中。
缺点:如果文件非常大,尤其是大于内存时,无法使用read()方法。
readline方法:每次读取一行
特点:每次读取一行;返回的是一个字符串对象,保持当前行的内存
缺点:比readlines慢得多
readlines方法
特点:一次性读取整个文件;自动将文件内容分析成一个行的列表
(2) 写入文件
write()方法:需要传入一个字符串做为参数,否则会报错
writelines()方法:既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件
三.关闭——close
close方法:关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误
四.文件的指针
(1)tell() 方法:返回文件的当前位置,即文件指针当前位置。
tell() 方法语法:fileObject.tell()
f = open('1.txt','r+',encoding='utf-8')
#查看文件名
print(f.name)
#读取一行
line = f.readline()
print(line)
#获取当前文件指针的位置(字节)
pos = f.tell()
print('当前的位置%s'%pos)
f.close()
(2)seek()方法:用于移动文件读取指针到指定位置。
seek第一个参数:移动的长度(字节);如果该值为负数,表示从后往前移动n个字节
seek第二个参数:0从开头(默认),1从当前,2从末尾
f = open('1.txt','r+',encoding='utf-8')
#查看文件名
print(f.name)
#读取一行
line = f.readline()
print(line)
#指针移动到开头
f.seek(0,0)
line = f.readline()
print(line)
f.close()
五.with语句
Python引入了with语句来自动帮我们调用close()方法
with的用法:
f = open('/tmp/passwd')
with open('/tmp/passwd') as f:
print(f.read())
同时打开两个文件对象(这种写法在python2中不支持)
with open('/tmp/passwd') as f1,\
open('/tmp/passwdbackup','w+') as f2:
#将第一个文件的内容写入第二个文件中
f2.write(f1.read())
#移动指针到文件最开始
f2.seek(0)
#读取指针内容
print(f2.read())
#在python2中,打开两个文件只能如下所示
with open('/tmp/passwd') as f1:
content = f1.read()
with open('/tmp/passwdbackup','w+') as f2:
f2.write(content)
六.遍历读取
文件对象本身可以迭代,并且以行的形式读取
f = open('1.py','r',encoding='utf-8')
for i in f:
print(i)
方法 | 含义 |
---|---|
os.sep | 符合当前系统的路径分割符,Linux/windows\ |
os.name | 返回操作系统类型windows“nt”Linux“posix” |
os.rename | 更改文件名,传递两个参数(旧文件名,新文件名) |
os.getcwd | 返回当前的工作目录 |
os.listdir | 列出指定目录下的目录和文件 |
os.chdir | 修改当前的工作路径 |
os.mkdir | 创建目录 |
os.makedirs | 递归创建目录 |
os.remove | 删除文件 |
os.rmdir | 删除文件夹(文件夹下内容为空) |
os.removedirs | 递归删除文件夹 |
os.system | 执行系统命令 |
os.popen | 执行系统命令,会将结果以文件的形式返回 |
os.walk | 通过在目录树中游走输出在目录中的文件名,向上或者向下 |
os.path.join | 连接目录和文件名。os.path.join(path,name) |
os.path. isfile | 判断指定对象是否为文件。是返回True,否则False |
os.path.isdir | 判断指定对象是否为目录。是True,否则False |
os.path. split | 返回路径的目录和文件名 |
os.path. exists | 检验指定的对象是否存在。是True,否则False |
os.path.getsize | 获取指定对象的文件大小 |
os.path.abspath | 获得绝对路径 |
os.path.basename | 返回文件名 |
os.path.dirname | 返回文件所在目录 |
os.name()——判断现在正在实用的平台,Windows 返回 ‘nt’; Linux 返回’posix’
rename(需要修改的文件名, 新的文件名) 也可以做剪切。
os.getcwd()——得到当前工作的目录。
os.listdir()——指定所有目录下所有的文件和目录名。
以列表的形式全部列举出来,其中没有区分目录和文件。
os.mkdir()——创建目录
os.remove()——删除指定文件
os.rmdir()——删除指定目录 :该目录不能为空
注意:这样只能建立一层,要想递归建立可用:os.makedirs(‘x/y/z’)
os.path.isfile()——判断指定对象是否为文件。是返回True,否则False
os.path.isdir()——判断指定对象是否为目录。是True,否则False。
os.path.exists()——检验指定的对象是否存在。是True,否则False.
os.path.split()——返回路径的目录和文件名。此处只是把前后两部分分开而已。就是找最后一个’/’。也可以认为将路径和文件名分开
os.system()——执行shell命令。
os.chdir()——改变目录到指定目录(谨慎更改)
案例:
os.getcwd()
'E:\\workspace\\importTest'
path = '/tmp'
os.chdir(path)
os.getcwd()
'E:\\tmp'
os.chdir('E:\\workspace\\importTest'
)
os.getcwd()
'E:\\workspace\\importTest'
os.path.getsize()——获得文件的大小(字节),如果为目录,返回0
os.path.abspath()——获得绝对路径。
os.path.join(path, name)——连接目录和文件名。
例:
filepath = os.getcwd()
new_path = os.path.join(filepath,filename)
16.os.path.basename(path)——返回文件名
os.path.dirname(path)——返回文件所在目录
os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。在Unix,Windows中有效。
表达式:
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
top 代表的是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
root 所指的是当前正在遍历的这个文件夹的本身的地址。
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)。
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)。
案例:
import os
#获取当前路径
path = os.getcwd()
#返回文件夹本身的地址,目录,文件
for root,dirs,files in os.walk(path):
for filename in files:
print(os.path.join(root,filename))
运行结果如下:
E:\workspace\importTest\1.png
E:\workspace\importTest\1.txt
E:\workspace\importTest\2.png
E:\workspace\importTest\2.py
E:\workspace\importTest\3.py
E:\workspace\importTest\class_test.py
E:\workspace\importTest\test01.py
实例:如何批量修改文件夹下的文件名?
#获取该目录下的所有
m_name = os.listdir('./xuegod')
#对该目录下的文件遍历
for temp in m_name:
#新的文件名
new_name = 'xuegod'+temp
#更改文件名,前参数 代表老文件名,后面的参数代表新的文件名
os.rename('./xuegod/'+temp,'./xuegod/'+new_name)