欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python os模块及open函数用法

程序员文章站 2024-03-26 11:02:47
...

python脚本开发中经常会遇到系统和文件的操作,梳理下

一、os模块儿

1、获取当前所在路径及路径下的文件

  • os.getcwd():获取当前路径,返回字符串
  • os.listdir(path):列举路径下所有文件,返回列表类型(用来判断文件夹是否为空)
  • os.path.abspath(path):返回path绝对路径,path为".",表示当前目录,".."表示上一级目录
  • os.path.dirname(path):返回path中的文件夹部分,结果不包含'\'
  • os.path.basename(path):返回path的文件名

代码示例:

#coding:utf-8
import os

#获取当前目录
print os.getcwd()
#获取目录下的所有文件,可用于判断目录是否为空
print os.listdir(os.getcwd())
#返回当前目录
print os.path.abspath('.')
#返回上一级目录
print os.path.abspath('..')
#返回path文件夹部分,结尾不包含\,就是把最后一级的"\",左右分开,前边是dirname,后边是basename
print os.path.dirname(os.getcwd())
#返回path文件名部分
print os.path.basename(os.getcwd())

2、路径分解split,路径拼接join

  • os.path.split(path):将路径分解为文件名,文件夹,返回元组类型
  • os.path.join(path1,path2,...):将path进行组合,若有绝对路径,之前的path将被删除。
import os

#若path以'\'结尾,文件名为空;文件名不会包含'\'
print os.path.split('D:\\python27\\test')
print os.path.split('D:\\python27\\test\\')
print os.path.split('D:\\python27\\test')
print os.path.split('D:/python27/test')
print os.path.split('D:/python27/test/')


print os.path.join(os.getcwd(),'test')
print os.path.join(os.getcwd(),'/test')
print os.path.join(os.getcwd(),'\kest')

#'/'之前的路径会被清除
print os.path.join(os.getcwd(),'1','2','3')
print os.path.join(os.getcwd(),'1','2','3','/test')
('D:\\python27', 'test')
('D:\\python27\\test', '')
('D:\\python27', 'test')
('D:/python27', 'test')
('D:/python27/test', '')
F:\Eclipse\pytest\test
F:/test
F:\kest
F:\Eclipse\pytest\1\2\3
F:/test

注:'\','/' 在python这里不区分。

3、查看文件是否存在,创建目录

  • os.path.exists(path):判断文件/文件夹是否存在,返回true,false
  • os.makedirs(path):创建多层目录,递归创建
  • os.mkdir(path):一级一级创建目录,前提是前面目录已存在,不存在会报异常
  • os.remove(path):删除指定的文件
  • os.rmdir(path):删除文件夹(文件夹是空的才会被删除,如果不是空的会报错)
  • os.path.isfile(path):判断path是否是文件
  • os.path.isdir(path):判断path是否是目录
import os

if not os.path.exists(u'F:/test'):
    os.makedirs('F:/test')

二、open函数

打开文件,得到文件句柄并赋值给个变量(文件对象);通过句柄对文件进行操作;关闭文件

f=open('test.txt','w')  #打开文件,赋值给句柄
data=f.read()       #操作句柄读取数据
print(data)
f.close()           #关闭文件

 open函数第一个参数是文件名称(包含路径),第二个参数是操作模式(如下表)

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 注:有+表示读写模式,有b表示二进制相关文件,r是读(文件不存在,则报错,w是写(如果文件不存在,创建新文件,这里创建新文件的规则是:如果path不包含路径,文件不存在,则创建;如果path包含路径,路径存在,文件不存在,创建文件;如果path包含路径,路径不存在,则报错,a是在文件后面写

常用系统文件操作示例:

import os

#文件是否存在
if os.path.exists(u'F:/test/test.txt'):
    print u'文件存在'
    
#文件夹是否存在
path='F:\\xixixi'
if not os.path.exists(u'F:/xixixi'):
    os.makedirs(u'F:/xixixi')#创建多层目录
    #目录已有,open函数以写的方式打开文件,文件不存在则创建
    f=open(u'F:/xixixi/text.txt','w')
    #关闭文件
    f.close()
    #with as用法
    with open('F:/xixixi/text.txt') as f:
        print f.read()
        
print os.path.join(path,'text.txt')

注:f.read,readline,readlines有文件指针的概念,read()函数执行完之后,文件指针在文件最后,如果需要操作,比较笨的方法是重新打开文件