iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 22
0
自我挑戰組

Python 學習筆記系列 第 22

Day22 Python 基礎 - 文件操作_V2

嗯,那如何要把游標的位置給打印來?

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open('test', 'r')
print(f.tell())

---------------執行結果---------------

0

Process finished with exit code 0

那在試試把文件讀完後,再打印一次游標位置

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open('test', 'r')
print(f.tell())
print(f.readline())
print(f.tell())

---------------執行結果---------------
0
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言

129   # 129個字符,記得換行符號要也算進去哦

Process finished with exit code 0

唔…不相信?是129個字符,好吧,那就用另一個方式read()來呈現好了,預設read()不指定的話,是讀取所有的,因此我們這次使用read(6)來試試,看看是不是真的為6個字符

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open('test', 'r')
print(f.tell())
print(f.read(6))
print(f.tell())

---------------執行結果---------------

0
Python
6

Process finished with exit code 0

嗯嗯,真的是6個字符,那通常我們還是會用readline(),因為這樣不用去數這一行有幾個字符,直接幫你讀取整行,那假設我們現在讀取了三行後,要怎麼讓游標回到一開始?

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open('test', 'r')
print(f.tell())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.tell())
f.seek(0)
print(f.readline())

---------------執行結果---------------

0
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言

它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡單,與其它大多數程式設計語言使用大括弧不一樣,它使用縮進來定義語句塊

與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理記憶體使用

454
Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言


Process finished with exit code 0

唔…觀察一下,游標真的回到一開始了,原來使用seek(0)就可以了,通常tell()會跟seek()一起使用,tell()會打印出目前游標的位置,seek()可以指定游標的位置停在哪裡

那如果要檢查文件是用什麼字符編碼的,要怎麼查呢?

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open('test', 'r')
print(f.readline())
print(f.encoding)

---------------執行結果---------------

Python(英國發音:/ˈpaɪθən/ 美國發音:/ˈpaɪθɑːn/),是一種物件導向、直譯式的電腦程式語言

UTF-8

Process finished with exit code 0

唔,看到打印出UTF-8了,這樣就可以確定了

觀察一下,下面代碼的fileno()name()

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

f = open("test", "wb")
print ("Name of the file: ", f.name)

fid = f.fileno()
print ("File Descriptor: ", fid)

---------------執行結果---------------

Name of the file:  foo.txt
File Descriptor:  3

fileno() 這個是作業系統專門的接口,專門去調度系统的 I/O 操作,這個接口是提供給所有程式語言使用,並不是Python才會有的

name() 這個是打印出文件名字,很簡單吧

isatty() 就是判斷是不是一個終端設備,為真返回True,這個較少用

seekable() 不是所有的文件都可以移動游標,這個主要是拿來判斷普通文件裡的游標能不能移動,為真返回True

readable() 判斷文件是不是可讀的權限,為真返回True

writable() 判斷文件是不是可寫的權限,為真返回True

flush() 即時地把記憶體中的緩衝區裡的資料,立刻寫回至文件中,同時清空緩衝區,一般情況下,文件關閉後會自動刷新緩衝區,但有時你需要在關閉前刷新它,這時就可以使用 flush()方法

下面我們來做一下實驗

參考資料:

唔…先去吃飯,等等繼續更新,原來這週末也是連假阿…可惜這週末要參加的活動有點多,很怕會斷賽(屎)


上一篇
Day21 Python 基礎 - 文件操作_v2
下一篇
Day23 Python 基礎 - 文件操作_V2
系列文
Python 學習筆記29

尚未有邦友留言

立即登入留言