天天看點

Python 檔案操作

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>import</code> <code>time</code>

<code>import</code> <code>random</code>

<code>#打開模式清單:</code>

<code>#w      以寫方式打開,</code>

<code>#a      以追加模式打開 (從 EOF 開始, 必要時建立新檔案)</code>

<code>#r+     以讀寫模式打開</code>

<code>#w+     以讀寫模式打開 (參見 w )</code>

<code>#a+     以讀寫模式打開 (參見 a )</code>

<code>#rb     以二進制讀模式打開</code>

<code>#wb     以二進制寫模式打開 (參見 w )</code>

<code>#ab     以二進制追加模式打開 (參見 a )</code>

<code>#rb+    以二進制讀寫模式打開 (參見 r+ )</code>

<code>#wb+    以二進制讀寫模式打開 (參見 w+ )</code>

<code>#ab+    以二進制讀寫模式打開 (參見 a+ )</code>

<code>f</code><code>=</code>

<code>open</code><code>(</code><code>‘tpm.txt‘</code><code>,</code><code>‘a+‘</code><code>)</code>

<code>for</code> <code>i</code><code>in</code> <code>range</code><code>(</code><code>10</code><code>) :</code>

<code>    </code><code>f.write(time.strftime(</code><code>‘%Y-%m-%d %H:%M:%S‘</code><code>))</code>

<code>    </code><code>f.write(</code><code>‘ ‘</code>

<code>+</code> <code>str</code><code>(random.randint(</code><code>0</code><code>, i))</code><code>+</code> <code>‘\n‘</code><code>)</code>

<code>f.close()</code>

<code>open</code><code>(</code><code>‘tpm.txt‘</code><code>)</code>

<code># read方式讀取</code>

<code>s</code><code>=</code>

<code>f.read()</code>

<code>print</code><code>(s,</code><code>‘\n\n\n‘</code><code>)</code>

<code>print</code><code>(f.tell())</code>

<code>#上面讀取完後指針移動到最後,通過seek将檔案指針移動到檔案頭</code>

<code>f.seek(</code><code>0</code><code>)</code>

<code>#使用readline每次讀取一行</code>

<code>while</code><code>(</code><code>True</code><code>):</code>

<code>    </code><code>line</code><code>=</code> <code>f.readline()</code>

<code>    </code><code>print</code><code>(line)</code>

<code>    </code><code>if</code><code>(</code><code>len</code><code>(line)</code><code>=</code><code>=</code>

<code>0</code><code>):</code>

<code>        </code><code>break</code>

23

24

25

<code>#os子產品,處理檔案和目錄的一系列函數</code>

<code>import</code> <code>os</code>

<code>#列印目前目錄下的所有檔案 非遞歸</code>

<code>print</code><code>(os.listdir(os.getcwd()))</code>

<code>#切換目錄為目前目錄</code>

<code>os.chdir(</code><code>‘.‘</code><code>)</code>

<code>#判斷目标是否存在,不存在則建立</code>

<code>if</code><code>(os.path.exists(</code><code>‘./osdirs‘</code><code>)</code><code>=</code><code>=</code>

<code>False</code><code>):</code>

<code>    </code><code>os.mkdir(</code><code>"./osdirs"</code><code>)</code>

<code>#重命名檔案或目錄名</code>

<code>if</code><code>(os.path.exists(</code><code>"./os"</code><code>)</code><code>=</code><code>=</code>

<code>False</code><code>) :</code>

<code>    </code><code>os.rename(</code><code>"./osdirs"</code><code>,</code><code>"./os"</code><code>)</code>

<code>#rmdir删除目錄,需要先清空檔案中的子目錄或檔案夾</code>

<code>#removedirs可多層删除目錄(需要目錄中無檔案) makedirs可多層建立目錄</code>

<code>if</code><code>(os.path.isdir(</code><code>"./os"</code><code>)) :</code>

<code>    </code><code>os.rmdir(</code><code>"./os"</code><code>)</code>

<code>#删除檔案</code>

<code>if</code><code>(os.path.exists(</code><code>‘./tpm.txt‘</code><code>)):</code>

<code>    </code><code>os.remove(</code><code>‘./tpm.txt‘</code><code>)</code>

os子產品中常用方法和屬性:

屬性 os.linesep 檔案中分割行的字元串 os.sep檔案路徑名的分隔符 os.curdir目前工作目錄的字元串名稱 os.pardir父目錄字元串名稱 方法 os.remove()删除檔案 os.rename()重命名檔案 os.walk()生成目錄樹下的所有檔案名 os.chdir()改變目錄 os.mkdir/makedirs建立目錄/多層目錄 os.rmdir/removedirs删除目錄/多層目錄 listdir()列出指定目錄的檔案 getcwd()取得目前工作目錄(current work directory) chmod()改變目錄權限 os.path.basename()去掉目錄路徑,傳回檔案名 os.path.dirname()去掉檔案名,傳回目錄路徑 os.path.join()将分離的各部分組合成一個路徑名 os.path.split()傳回(dirname(),basename())元組 os.path.splitext()(傳回filename,extension)元組 os.path.getatime\ctime\mtime分别傳回最近通路、建立、修改時間 os.path.getsize()傳回檔案大小 os.path.exists()是否存在 os.path.isabs()是否為絕對路徑 os.path.isdir()是否為目錄 os.path.isfile()是否為檔案

<code>import</code> <code>shutil</code>

<code>#複制檔案,相當于CP指令</code>

<code>shutil.copy(</code><code>‘start2.txt‘</code><code>,</code><code>‘start3‘</code><code>)</code>

<code>#移動檔案或目錄,相當于MV指令</code>

<code>shutil.move(</code><code>‘start3‘</code><code>,</code><code>‘start4‘</code><code>)</code>

<code>if</code><code>(os.path.exists(</code><code>‘./a/b/c‘</code><code>)</code><code>=</code><code>=</code>

<code>    </code><code>os.makedirs(</code><code>‘./a/b/c‘</code><code>)</code>

<code>#删除目錄</code>

<code>shutil.rmtree(</code><code>‘./a‘</code><code>)</code>

<code>if</code><code>(os.path.exists(</code><code>‘./a/b/c/d‘</code><code>)</code><code>=</code><code>=</code>

<code>    </code><code>os.makedirs(</code><code>‘./a/b/c/d‘</code><code>)</code>

<code>    </code> 

<code>#複制目錄</code>

<code>if</code><code>(os.path.exists(</code><code>‘b‘</code><code>)</code><code>=</code><code>=</code>

<code>    </code><code>shutil.copytree(</code><code>‘a‘</code><code>,</code><code>‘b‘</code><code>)</code>

shutil中常用方法

copyfile( src, dst) 從源src複制到dst中去。當然前提是目标位址是具備可寫權限。抛出的異常資訊為IOException. 如果目前的dst已存在的話就會被覆寫掉 copymode( src, dst) 隻是會複制其權限其他的東西是不會被複制的 copystat( src, dst) 複制權限、最後通路時間、最後修改時間 copy( src, dst) 複制一個檔案到一個檔案或一個目錄 copy2( src, dst) 在copy上的基礎上再複制檔案最後通路時間與修改時間也複制過來了,類似于cp –p的東西 copy2( src, dst) 如果兩個位置的檔案系統是一樣的話相當于是rename操作,隻是改名;如果是不在相同的檔案系統的話就是做move操作 copytree(olddir,newdir,True/Flase) 把olddir拷貝一份newdir,如果第3個參數是True,則複制目錄時将保持檔案夾下的符号連接配接,如果第3個參數是False,則将在複制的目錄下生成實體副本來替代符号連接配接 rmtree(path[, ignore_errors[, onerror]]) 删除目錄 move( src, dst) 移動檔案或目錄

<code>#周遊目前路勁下的所有目錄和檔案夾</code>

<code>#傳回元組包含三個參數:1.父目錄 2.所有檔案夾名字(不含路徑) 3.所有檔案名字</code>

<code>for</code> <code>root, dirs, files</code><code>in</code> <code>os.walk(os.getcwd()):</code>

<code>    </code><code>#輸出檔案夾資訊</code>

<code>    </code><code>for</code>

<code>dir</code> <code>in</code> 

<code>dirs:</code>

<code>        </code><code>print</code><code>(os.path.join(root,</code><code>dir</code><code>))</code>

<code>    </code><code>#輸出檔案資訊</code>

<code>file</code> <code>in</code>

<code>files:</code>

<code>        </code><code>print</code><code>(os.path.join(root,</code><code>file</code><code>))</code>

Python的檔案操作和PHP類似,都有現成的函數去實作,是以基本上記住常用的函數就可以了。

上一篇: 3D
下一篇: linux指令之tr