1. 程式人生 > >python3的檔案與目錄操作

python3的檔案與目錄操作

1.open函式

2.常用的檔案操作

3.用fileinput()操作檔案

4.利用os模組進行目錄操作

4.1獲取當前路徑

4.2獲取目錄內容

4.3建立和刪除目錄

4.4判斷是否目錄,檔案

4.5遍歷某目錄下的所有目錄和檔案

1.open函式

當使用python的內建函式 open() 開啟一個檔案後,就會返回一個 檔案物件,open()常用的格式如下:

f = open(filename,mode)
filename:表示檔名或者檔案路徑

mode:表示開啟檔案的模式,是可選引數,下面列表介紹mode有哪些可以選擇

模式字元 表示的操作
r 只讀(預設)
w 可寫,但會先清除原來檔案內容
a 追加資料
b 二進位制資料模式
x 新建一個檔案,可寫
+ 開啟檔案直接更新
t 文字模式(預設)

例項:

def file_open(name = ‘python.txt’):
     f = open(name)


2.常用檔案操作

如有:

f = open(filename)
檔案操作 功能描述
  f.read([n]) 將整個檔案讀入字串中,或指定讀取n個字元
  f.readline([n]) 讀取檔案的一行到字串中,或者指定讀取一行的n個字元
  f.readlines() 將整個檔案按行讀入到列表中
  f.write(s) 向檔案中寫入字串s
  file.writelines(lines) 向檔案寫入一個行資料列表
  f.close() 關閉開啟的檔案

如:

f = open('camt.c','rb')
lines = f.readlines()
for line in lines:
    print(line.strip().decode('utf-8'))
readlines返回的是一個list列表,list列表中每一項表示檔案中的  一行資料/文字

3.用 fileinput操作檔案   ( 要先匯入fileinput模組:import fileimput )

作用:fileinput可以同時對一個或多個檔案中的內容進行迭代,遍歷等操作。該模組的 input() 方法有點類似檔案的 readlines()方法,區別是前者只是迭代一個物件,每次只生成一行,而後者是一次性讀取所有行,當遇到大檔案時,無疑前者更有效率。

fileinput的常用可選引數:

inplace:用於決定print輸出到哪,若inplace = 0,print 則輸出到螢幕(即標準輸出),若inplace = 1,則把print 結果寫到檔案,預設情況下 inplace = 0

backup:指定備份檔案的副檔名,如.bak,若備份檔案存在,則覆蓋

fileinput模組中常用的函式有:

函式 功能
  input()                                      返回能夠用於迭代   一個或多個檔案中所有行   的物件(可以給input傳入一個列表)
  filename() 返回當前檔案的名稱
  lineno() 返回當前讀取的行的數量
  isfirstline() 返回當前行是否檔案的第一行
  filelineno() 返回當前讀取行在檔案中的行數

示例一:(開啟單個檔案)
import fileinput

with fileinput.input('1.txt') as lines:
    for line in lines:
        print(line.strip())
        
'''
C
C++
C#
java
python
'''

示例二:(批量處理 txt檔案)
import fileinput

#1.txt
C 
C++
C#

#2.txt
java 
python 

#程式
def process(line):
    return (line.rstrip()+ ' language')

for line in fileinput.input(['1.txt','2.txt'],inplace=1):
    print(process(line))
    
'''
執行結果:
1.txt:
C language 
C++ language 
C# language 

2.txt:
java language
python language
'''


示例三:(利用fileinput把檔案內容替換,並把原有檔案備份)

import fileinput

'''
樣本檔案:1.txt:
C
C++
C#
'''
for line in fileinput.input('1.txt',inplace=1,backup='.bak'):
    print(line.rstrip().replace('C++','Java'))
    
'''
執行後的1.txt:
C
Java
C#

並生成一個 1.txt.bak備份檔案
'''


4.利用os模組進行目錄操作

Python提供的 os 模組提供了很多對檔案或目錄進行操作的函式,可以方便地對檔案進行重新命名,增加/刪除目錄,複製目錄等操作。

4.1獲取當前路徑

os.getcwd():打印出程式所在的目錄

import os

print(os.getcwd())
#列印結果:C:\Users\abc\PycharmProjects\untitled3

4.2獲取目錄中的內容

os.listdir(path):列出目錄路徑path下有哪些檔案,若不寫path,則預設為當前目錄

import os
print(os.listdir())

4.3建立和刪除目錄

os.mkdir(path):path為要建立的目錄路徑

如在當前目錄下建立一個new目錄:

import os
os.mkdir('new')

同理,刪除目錄為:

os.rmdir(path)

4.4判斷是否目錄,檔案

os.path.isdir(path) :path為要判斷的路徑,返回True or False

os.path.isfile(path):path為要判斷的路徑,返回True or False

4.5遍歷某目錄下的所有檔案和目錄

python中可以使用 os.walk(path) 函式,

os.walk(path)的輸出:

os.walk()遍歷目錄後輸出的格式為多個元組,每個元組第一項為遍歷的目錄名 , 第二項為遍歷目錄中的子目錄列表,第三項為遍歷目錄中所有檔案的列表。

示例一:

import os
for i in os.walk(r'./'): #對當前目錄進行遍歷
    print(i)
'''
列印結果:
('./', ['.idea', 'new'], ['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c'])
('./.idea', [], ['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml'])
('./new', ['新建資料夾'], ['新建文字文件.txt'])
('./new\\新建資料夾', [], ['新建 RTF 文件.rtf'])
'''

示例二:

由於os.walk() 的輸出是分三塊的(遍歷的目錄,遍歷到的目錄名,遍歷到的檔名),因此接收 os.walk()元組時也可以用三個引數來接受,分別裝三塊的資料。

如下程式,我只打印出在當前路徑下能遍歷到的所有檔案:

import os
for path,dir,file in os.walk(r'./'): #對當前目錄進行遍歷
    #print(path)
    #print(dir)
    print(file)

'''
列印結果:
['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c']
['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml']
['新建文字文件.txt']
['新建 RTF 文件.rtf']
'''