2016年12月13日 星期二

[Django] 1.7.3 讀檔與寫入檔案

資料檔的讀寫是python 的基本功能之一

開啟檔案:使用open函數

fp = open('test_file.txt','r')
a = fp.read()
b = fp.readline()
c = fp.readlines()
fp.close()
其中,test_file的欄位可填入絕對路徑,但是請注意
windows: fp = open('C:\\Users\\jack\\Desktop\\test_file.txt')
mac : fp = open('/Users/Documents/test_file.txt')
因為windows的路徑的斜線是\,會造成跳脫字元,所以要輸入兩個\
而mac沒有這個困擾

r:讀檔 w:寫入 a:附加

讀取檔案的方法有三種:read(), readline(), readlines()
      read() : 一口氣讀完
 readline():一次只讀一行文字檔,傳回一個字串
readlines():把每一行拆開放在不同的字串變數,最後彙整成一個串列




f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')

print (f.read())

#f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')
print (f.readline())
print (f.readline())

f = open ('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r')
print (f.readlines())
read() 會顯示全部內容
readline() 照理說會顯示
 >>>
Beautiful is better than ugly

 Explicit is better than implicit
>>>

 因為純文字格式每行後面都有個換行符號\n ,加上本身print也有一個換行
有兩種解決方法
(1) 用strip()清除字串頭尾非必要字元
(2) print      ,end=""

使用with敘述可以讓程式更簡潔

with open('C:\\Users\\jack\\Desktop\\MP21602\\zop.txt','r') as f:
     for line in f:
         print line

上述程式把要讀取的檔案名稱寫在程式碼並不是個很好的方式,通常會把要操作的文字對象已執行參數的方式輸入 程式命令列函數可以用sys.argv取得

import sys

if len(sys.argv)<2:
    print("How to use: python 8-2.py class")
    exit(1)

std_data = dict()

with open(sys.argv[1],encoding='utf-8') as fp:
    alldata = fp.readlines()

for line in alldata:
    no,name = line.rstrip('\n').split(',')
    std_data[no] = name

print (std_data)

<\pre>


沒有留言:

張貼留言