Python笔记:操作系统目录和文件

Python操作系统目录和文件的笔记

os模块

Python的os模块封装了操作系统的目录和文件操作。
这些函数有的在os模块中,有的在os.path模块中。

目录操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- coding: utf-8 -*-
import os

print(os.name)
#输出操作系统类型,如果是posix,说明系统是Linux、Unix或Mac OS X,如果是nt,就是Windows。

print(os.environ)
#输出操作系统中定义的全部环境变量

print(os.environ.get('PATH'))
#要获取某个环境变量的值,可以调用

os.environ.get('key')

print(os.path.abspath('.'))
#查看当前目录的绝对路径
  1. 在某个目录下创建一个新目录
1
2
3
#把新目录的完整路径表示出来
os.path.join('H:/', 'testdir')
#在H盘创建了一个testdir文件夹。

把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符。

1
2
#创建一个目录
os.mkdir('H:/testdir')

拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名。

1
2
3
4
5
6
7
8
9
10
print(os.path.split('H:/name.txt'))

#输出('H:','name.txt')

os.path.splitext()可以直接得到文件扩展名:

```python
print(os.path.splitext('H:/name.py'))

#输出('H:/name','.py')

注:这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。

  1. 利用Python的特性来过滤文件:

os.listdir():返回指定的文件夹包含的文件或文件夹的名字的列表。
os.path.isdir():判断某一路径是否为目录 。
os.path.isfile():判断某一路径是否为文件

1
2
3
4
5
6
7
8
9
10
11
#列出当前目录下的所有目录(即文件夹)
file1=[x for x in os.listdir('.') if os.path.isdir(x)]
print(file1)

#列出当前目录下所有的.py文件
file2=[x for x in os.listdir('.') if os.path.isfile(x)
and os.path.splitext(x)[1]=='.py']

print(file2)

#输出['a.py', 'b.py', 'c.py']

文件操作

1,创建文件方法:

1
2
f=open("D://111.cc",mode="w",encoding="UTF-8")  
f.close()

2,删除一个文件

1
2
os.remove("D://222.ccc123")  
os.close()

3,创建一个目录或多个目录

1
2
os.mkdir("E://bb")  
os.makedirs("D:\\a\\b")

4,删除依旧用remove方法或多级删除

1
2
os.removedirs(path)  
os.remove()

5,拷贝,重命名,查看文件大小,打开文件

1
2
3
4
5
6
7
import os  
import shutil
#第一个参数是源文件,第二个拷贝文件
shutil.copyfile("D://111.CC","D://222.ccc")
os.rename("D://222.ccc","D://222.ccc123")
os.stat("D://abc.txt").st_size
os.startfile("D://abc.txt")

6,查看某个目录下文件数量:

1
2
3
4
5
6
7
8
def countDirs(dp):  
tt=tuple(os.walk(dp))
print("文件夹"+dp+"的信息:")
print("文件夹的个数: ",len(tt[0][1]),"文件的个数: ",len(tt[0][2]))


d1="D:\\tomcat7\\bin"
countDirs(d1)

结果如下:
文件夹D:\tomcat7\bin的信息:
文件夹的个数: 0 文件的个数: 28
Process finished with exit code 0

7,递归打印文件夹的方法:

1
2
3
4
5
def showAllDirs(dp):  
tt=os.walk(dp);
for l in tt:
for lf in l[1]:
print("目录的路径是:",l[0]+"\\"+lf)

递归打印文件的方法:

1
2
3
4
5
def showAllDirsFiles(dirPath):  
tt=os.walk(dirPath);
for l in tt:
for ll in l[2]:
print("文件的路径是:",l[0]+"\\"+ll)

8,读取文件的方法:

1
2
3
4
5
6
def readFile():  
f=open(r"D:///bbb.txt",encoding="UTF-8")
for line in f:
#去除多余的换行符
print(line.strip())
f.close();

批量载入读取:

1
2
3
4
5
6
7
8
9
10
11
def readFile1():  
f=open(r"D:///bbb.txt",encoding="UTF-8")
while 1:
#print("j")
lines=f.readlines(10000);
if not lines:
#print("end")
break;
for line in lines:
print(line.strip())
f.close()

写入文件例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
def writeFile():  
a=list();
a.append("a你好")
a.append("b哈喽")
a.append("c")
#a追加模式w覆盖模式
f=open("D://pp.txt",mode='a',encoding="UTF-8")
print("文件大小:",f)

for c in a:
f.write(c+"\n")
f.close()
print("写入成功!")