python中的文件系统管理(os模块)

python打开文件的三步(打开->操作->关闭)

一.打开——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语句执行时,便执行上下文表达式(context_expr)(一般为某个方法)来获得一个上下文管理器对象,上下文管理器的职责是提供一个上下文对象,用于在with语句块中处理细节:
  • 一旦获得了上下文对象,就会调用它的__enter__()方法,将完成with语句块执行前的所有准备工作,如果with语句后面跟了as语句,则用__enter__()方法的返回值来赋值;
  • 当with语句块结束时,无论是正常结束,还是由于异常,都会调用上下文对象的__exit__()方法,exit()方法有3个参数,如果with语句正常结束,三个参数全部都是 None;如果发生异常,三个参数的值分别等于调用sys.exc_info()函数返回的三个值:类型(异常类)、值(异常实例)和跟踪记录(traceback),相应的跟踪记录对象。

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模块——对操作系统进行操作

方法 含义
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 返回文件所在目录
  1. os.name()——判断现在正在实用的平台,Windows 返回 ‘nt’; Linux 返回’posix’

    rename(需要修改的文件名, 新的文件名) 也可以做剪切。

  2. os.getcwd()——得到当前工作的目录。

  3. os.listdir()——指定所有目录下所有的文件和目录名。

以列表的形式全部列举出来,其中没有区分目录和文件。

  1. os.mkdir()——创建目录

  2. os.remove()——删除指定文件

  3. os.rmdir()——删除指定目录 :该目录不能为空

注意:这样只能建立一层,要想递归建立可用:os.makedirs(‘x/y/z’)

  1. os.path.isfile()——判断指定对象是否为文件。是返回True,否则False

  2. os.path.isdir()——判断指定对象是否为目录。是True,否则False。

  3. os.path.exists()——检验指定的对象是否存在。是True,否则False.

  4. os.path.split()——返回路径的目录和文件名。此处只是把前后两部分分开而已。就是找最后一个’/’。也可以认为将路径和文件名分开

  5. os.system()——执行shell命令。

  6. 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'
  1. os.path.getsize()——获得文件的大小(字节),如果为目录,返回0

  2. os.path.abspath()——获得绝对路径。

  3. os.path.join(path, name)——连接目录和文件名。

例:

filepath = os.getcwd()
new_path = os.path.join(filepath,filename)

16.os.path.basename(path)——返回文件名

  1. os.path.dirname(path)——返回文件所在目录

  2. 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)

你可能感兴趣的:(python)