1. 程式人生 > >Python學習筆記__9.3章 操作文件和目錄

Python學習筆記__9.3章 操作文件和目錄

編程語言 Python

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

os模塊可以直接調用操作系統提供的接口函數。幫助我們在Python程序中對目錄和文件進行操作。

操作文件和目錄的函數一部分放在os模塊中,一部分放在os.path模塊中

但是復制文件的函數居然在os模塊中不存在,原因是復制文件並非由操作系統提供的系統調用。不過shutil模塊提供了copyfile()的函數,你還可以在shutil模塊中找到很多實用函數,它們可以看做是os模塊的補充。

1、基本功能

>>> import os

>>> os.name # 操作系統類型

'posix'

如果是posix,說明系統是Linux、Unix或Mac OS X,如果是nt,就是Windows系統。

要獲取詳細的系統信息,可以調用uname()函數

2、環境變量

操作系統中定義的環境變量,全部保存在os.environ這個變量中,可以直接查看

>>> os.environ

要獲取某個環境變量的值,可以調用os.environ.get('key')

>>> os.environ.get('PATH')

'/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/mysql/bin'

>>> os.environ.get('x', 'default')

'default'

3、操作目錄

# 查看當前目錄的絕對路徑:

>>> os.path.abspath('.')

'/Users/michael'

# 在某個目錄下創建一個新目錄,首先把新目錄的完整路徑表示出來:

# 把兩個路徑合成一個時,不要直接拼字符串,而要通過os.path.join()函數

# 這樣可以正確處理不同操作系統的路徑分隔符。

>>> os.path.join('/Users/michael', 'testdir')

'/Users/michael/testdir'

# 然後創建一個目錄:

>>> os.mkdir('/Users/michael/testdir')

# 刪掉一個目錄:

>>> os.rmdir('/Users/michael/testdir')

4、對路徑的操作

# 拆分路徑,os.path.split()函數

>>> os.path.split('/Users/michael/testdir/file.txt')

('/Users/michael/testdir', 'file.txt') # 後一部分總是最後級別的目錄或文件名

# 得到文件擴展名,os.path.splitext()

>>> os.path.splitext('/path/to/file.txt')

('/path/to/file', '.txt')

5、操作文件

# 對文件重命名:

>>> os.rename('test.txt', 'test.py')

# 刪掉文件:

>>> os.remove('test.py')

6、利用python的特性過濾文件

# 列出當前目錄下的所有目錄

>>> [x for x in os.listdir('.') if os.path.isdir(x)] # 遍歷所有目錄

['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

# 列出所有的.py文件

>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']

2、例子

1、利用os模塊編寫一個能實現dir -l輸出的程序。

import os,time

currentdir = os.getcwd() #獲取路徑

filenum, filesize, dirnum = 0, 0, 0 #初始計量

for name in os.listdir(currentdir):
if os.path.isfile(name): #判斷文件是否存在

print('%s\t\t%d\t%s' % (time.strftime('%Y/%m/%d %H:%M', time.localtime(os.path.getmtime(name))), os.path.getsize(name), name)) #打印文件的時間,大小,名字

filenum += 1 #文件數量+1

filesize += os.path.getsize(name) # 文件大小累加

elif os.path.isdir(name): #判斷目錄是否存在

print('%s\t<DIR>\t\t%s' % (time.strftime('%Y/%m/%d %H:%M', time.localtime(os.path.getmtime(name))), name)) #打印目錄的時間,名字

dirnum += 1 #目錄數量+1

print('\t\t%d個文件\t\t%d 字節' % (filenum, filesize))
print('\t\t%d個目錄' % dirnum)

2、編寫一個程序,能在當前目錄以及當前目錄的所有子目錄下查找文件名包含指定字符串的文件,並打印出相對路徑。

import os

def search(dststr, path=['.']): #用相對路徑
for n in path:
dirlist = [x for x in os.listdir(n) if os.path.isdir(os.path.join(n, x))]
#找出子目錄名

filelist = [x for x in os.listdir(n) if os.path.isfile(os.path.join(n, x)) and dststr in os.path.splitext(x)[0]] #找出含關鍵字的文件名

if len(filelist) > 0:
print(n, ':')
for m in filelist:
print(m)
print('\n')
path = [os.path.join(n, x) for x in dirlist]
search(dststr, path)
return 'Done'

dststr = '2'
search(dststr)


Python學習筆記__9.3章 操作文件和目錄