首頁  >  文章  >  後端開發  >  python 檔案操作api

python 檔案操作api

高洛峰
高洛峰原創
2017-02-27 17:05:531091瀏覽

python中對檔案、資料夾(檔案操作函數)的操作需要涉及os模組和shutil模組。

得到目前工作目錄,也就是目前Python腳本工作的目錄路徑: os.getcwd()
傳回指定目錄下的所有檔案和目錄名稱:os.listdir()
函數用來刪除一個檔案:os.remove()
刪除多個目錄:os.removedirs(r“c:\python”)
檢驗給出的路徑是否為一個檔案:os. path.isfile()
檢定給出的路徑是否為目錄:os.path.isdir()
判斷是否為絕對路徑:os.path.isabs()
檢定給出的路徑是否真地存:os.path.exists()
回傳一個路徑的目錄名稱與檔名:os.path.split()     eg os.path.split('/home/swaroop/byte/code/poem.txt ') 結果:('/home/swaroop/byte/code', 'poem.txt')
分離副檔名:os.path.splitext()
取得路徑名:os.path.dirname()
取得檔名:os.path.basename()
執行shell指令: os.system()
讀取與設定環境變數:os.getenv() 與os.putenv()
給出目前平台使用的行終止符:os.linesep    Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
指示你正在使用的平台:os.name       對於Windows ,它是'nt',而對於Linux/Unix用戶,它是'posix'
重命名:os.rename(old, new)
建立多級目錄:os.makedirs(r“c:\ python\test」)
建立單一目錄:os.mkdir(「test」)
取得檔案屬性:os.stat(file)
修改檔案權限與時間戳記:os.chmod(file)
終止目前程序:os.exit()
取得檔案大小:os.path.getsize(filename)

檔案操作:
os.mknod("test .txt")        建立空白檔案
fp = open("test.txt",w)     直接開啟一個文件,如果檔案不存在則建立檔案

關於open 模式:

w     以寫入方式打開,
a     以追加模式開啟(從EOF 開始, 必要時建立新檔案)
r+     以讀取和寫入模式開啟# 參見w )
a+     以讀寫模式開啟(參見a )
rb      以讀寫模式開啟(參見a )
rb     以二進位讀取模式開啟
wb     以二元寫入模式開啟(參見w )
ab   )
rb+    以二進位讀寫模式開啟(參見r+ )
wb+    以二進位讀寫模式開啟(參見w+ )
ab+    以二進位讀寫模式開啟(參見#a+ )

ab+    以二進位讀寫模式開啟(參見#a+ #################

fp.read([size])                     #size為中讀取的長度,而以byte為單位# 可能回傳的只是一行的一部份
fp.readlines([size])                #以每個list中資料的一個成員,且回傳至這個list。其實它的內部是透過循環呼叫readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
fp.write(str)                      #將str寫到文件中,write()且不會在str後加上一個換(多行一次性寫入)。這個函數也只是忠實地寫入,不會在每行後面加上任何東西。
fp.close()                        #且已關閉檔案。 python會在一個文件不用後自動關閉文件,不過這項功能沒有保證,最好還是養成自己關閉的習慣。如果一個檔案在關閉後也操作會產生ValueError
fp.flush()                                                         
fp.isatty()                                                           的next()                                   把一個file用於for … in file這樣的語句時,就是呼叫next()函數來實現遍歷的。
fp.seek(offset[,whence])              #將文件打作業標記移至offset的位置。這個offset一般是相對於文件的開頭來計算的,一般為正數。但如果提供了whence參數就不一定了,whence可以為0表示從頭開始計算,1表示以目前位置為原點計算。 2表示以文件末端為原點進行計算。需要注意,如果文件以a或a+的模式打開,每次進行寫入操作時,文件操作標記會自動返回文件末尾。
fp.truncate([size])                       #將檔案裁成規定的大小,且預設的是裁至目前檔案作業的位置。如果size比文件的大小還要大,依據系統的不同可能是不改變文件,也可能是用0把文件補到對應的大小,也可能是以一些隨機的內容加上去。

目录操作:
os.mkdir("file")                   创建目录
复制文件:
shutil.copyfile("oldfile","newfile")       oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")            oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir")        olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname")       文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")  
删除文件
os.remove("file")
删除目录
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir")    空目录、有内容的目录都可以删
转换目录
os.chdir("path")   换路径

相关例子

1 将文件夹下所有图片名称加上'_fc'

python代码:

# -*- coding:utf-8 -*-
import re
import os
import time
#str.split(string)分割字符串
#'连接符'.join(list) 将列表组成字符串
def change_name(path):
  global i
  if not os.path.isdir(path) and not os.path.isfile(path):
    return False
  if os.path.isfile(path):
    file_path = os.path.split(path) #分割出目录与文件
    lists = file_path[1].split('.') #分割出文件与文件扩展名
    file_ext = lists[-1] #取出后缀名(列表切片操作)
    img_ext = ['bmp','jpeg','gif','psd','png','jpg']
    if file_ext in img_ext:
      os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
      i+=1 #注意这里的i是一个陷阱
    #或者
    #img_ext = 'bmp|jpeg|gif|psd|png|jpg'
    #if file_ext in img_ext:
    #  print('ok---'+file_ext)
  elif os.path.isdir(path):
    for x in os.listdir(path):
      change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用

img_dir = 'D:\\xx\\xx\\images'
img_dir = img_dir.replace('\\','/')
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print('程序运行耗时:%0.2f'%(c))
print('总共处理了 %s 张图片'%(i))

输出结果:

程序运行耗时:0.11
总共处理了 109 张图片


Python常见文件操作示例

    os.path 模块中的路径名访问函数
    分隔
    basename() 去掉目录路径, 返回文件名
    dirname() 去掉文件名, 返回目录路径
    join() 将分离的各部分组合成一个路径名
    split() 返回 (dirname(), basename()) 元组
    splitdrive() 返回 (drivename, pathname) 元组
    splitext() 返回 (filename, extension) 元组

    信息
    getatime() 返回最近访问时间
    getctime() 返回文件创建时间
    getmtime() 返回最近文件修改时间
    getsize() 返回文件大小(以字节为单位)

    查詢
    exists() 指定路徑(檔案或目錄)是否存在
    isabs() 指定路徑是否為絕對路徑
    isdir() 指定路徑是否存在且為目錄) 指定路徑是否存在且為一個檔案
    islink() 指定路徑是否存在且為一個符號連結
    ismount() 指定路徑是否存在且為一個掛載點
    samefile() 兩個路徑名是否指向同一個檔案
   
    os.path.isdir(name):判斷name是否為目錄,name不是目錄就回傳false
    os.path.isfile(name):namename是不是一個文件,不存在name也回傳false
    os.path.exists(name):判斷是否存在檔案或目錄name
    os.path.getsize(name):取得檔案大小,如果name是目錄回傳0L
    os.path.abspath(name):取得絕對路徑
    os.path.normpath(path):規格path字串形式
    os.path.split(name):分割檔案名稱與目錄(事實上,如果你完全使用目錄,它也會將最後一個目錄作為文件名而分離,同時它不會判斷文件或目錄是否存在)
    os.path.splitext():分離文件名與擴展名
    os.path.join(path,name):連接目錄與檔案名稱或目錄
    os.path.basename(path):返回檔案名稱
    os.path.dirname(path):返回檔案路徑
       
   
    os模組中的檔案操作:
    os 模組屬性
    linesep 用來分隔在檔案中所行的字串#  ##    pathsep 用來分隔檔案路徑的字串
    curdir 目前工作目錄的字串名稱
    pardir (目前工作目錄的)父目錄字串名稱
   
   1.重新命名:os. rename(old, new)
   
    2.刪除:os.remove(file)
    3.列出目錄下的檔案:os.listdir(path)
    4.取得目前工作目錄: os.getcwd()
    5.改變工作目錄:os.chdir(newdir)
    6.建立多層目錄:os.makedirs(r"c:\python\test")
    7.建立單一目錄:os.mkdir("test")
    8.刪除多個目錄:os.removedirs(r"c:\python") #刪除所給路徑最後一個目錄下所有空目錄。
    9.刪除單一目錄:os.rmdir("test")
    10.取得檔案屬性:os.stat(file)
    11.修改檔案權限與時間戳記:os.chmod(file)
    12.執行作業系統指令:os.system("dir")
    13.啟動新程序:os.exec(), os.execvp()
    14.在背景執行程式:osspawnv( )
    15.終止目前程序:os.exit(), os._exit()
    16.分離檔名:os.path.split(r"c:\python\hello.py") -- > ("c:\\python", "hello.py")
    17.分離副檔名:os.path.splitext(r"c:\python\hello.py") --> (" c:\\python\\hello", ".py")
    18.取得路徑名稱:os.path.dirname(r"c:\python\hello.py") --> "c:\ \python"
    19.取得檔案名稱:os.path.basename(r"r:\python\hello.py") --> "hello.py"
    20.判斷檔案是否存在:os .path.exists(r"c:\python\hello.py") --> True
    21.判斷是否為絕對路徑:os.path.isabs(r".\python\") --> ; False
    22.判斷是否為目錄:os.path.isdir(r"c:\python") --> True
    23.判斷是否為檔案:os.path.isfile(r"c :\python\hello.py") --> True
    24.判斷是否為連結檔案:os.path.islink(r"c:\python\hello.py") --> False
    25.取得檔案大小:os.path.getsize(filename)
    26.*******:os.ismount("c:\\") --> True
    27.搜尋目錄下的所有檔案:os.path.walk()

    shutil模組對檔案的操作:
    1.複製單一檔案:shultil.copy(oldfile, newfle)

    2 .複製整個目錄樹:shultil.copytree(r".\setup", r".\backup")

    3.刪除整個目錄樹:shultil.rmtree(r".\backup")

    临时文件的操作:
    1.创建一个唯一的临时文件:tempfile.mktemp() --> filename

    2.打开临时文件:tempfile.TemporaryFile()

    内存文件(StringIO和cStringIO)操作
    [4.StringIO] #cStringIO是StringIO模块的快速实现模块

    1.创建内存文件并写入初始数据:f = StringIO.StringIO("Hello world!")
    2.读入内存文件数据:print f.read() #或print f.getvalue() --> Hello world!
    3.想内存文件写入数据:f.write("Good day!")
    4.关闭内存文件:f.close()

import os
import os.path
import unittest
import time
#import pygame

class PyFileCommonOperatorTest(unittest.TestCase):
  def __init__(self):
    """constructor"""
  
  def test01(self):
    print os.linesep
    print os.sep
    print os.pathsep
    print os.curdir
    print os.pardir
    print os.getcwd()
    print 'unittest here'


if __name__ == "__main__":
  t = PyFileCommonOperatorTest()
  t.test01()

读文件的写法

#读文件的写法:
#读文本文件: 
input = open('data', 'r')#第二个参数是默认的,可以不加
#读二进制文件: 
input = open('data', 'rb')
#读取所有文件内容:
open('xxoo.txt').read()
#读取固定字节
open('abinfile', 'rb').read(100)
#读每行
file_object.readlines()


更多python 文件操作api相关文章请关注PHP中文网!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn