Python學習系列(五)(文件操作及其字典)

一、文件操作

1,讀文件

   在以'r'讀模式打開文件以後可以調用read函數一次性將文件內容全部讀出,也可以指定每次read讀多少字節,例如:

#coding:utf-8
fn='test1.py'
fp=open(fn,'r') #以讀的方式打開文件,文件必須首先存在和,.文件在同一目錄下py
print 'reading pos:',fp.tell()
r=fp.read(20) #讀取文件內容返回字符串
print 'have read:\"'+r+'\''
print 'reading pos:',fp.tell()
print fp.read()
fp.close()

2,寫文件

   如果想將某些內容寫入文件,可以以'w'寫的方式打開文件(如果文件不存在會創建),並且清空文件之前的內容。

fw='test.txt' 
fp=open(fw,'w') 
fp.write('www.google.com') 
fp.close()

3,讀寫文件r+,w+

   二者區別在於:r+是必須針對已存在的文件;w+可以創建未存在的文件。

 fn='rplus.txt'
 fp=open(fn,'w+')    
 r=fp.read(12)     
 print r     
 fp.close()

4,追加寫入文件a

 ‘w'寫模式打開的文件只能把內容寫入文件,原有內容將被清除,若想保留,則用‘a'追加寫模式。

fn='rplus.txt'
fp=open(fn,'w+')
fp.write('aaaaa\n')
fp.close()
fa=open('rplus.txt','a')
fa.write('bbbbb\n')
fa.close()
fa=open(fn,'r')
r=fa.read()
print r
fa.close()

二,格式化讀寫文件

1,格式化寫文件

   調用write函數,使用格式化控制符來格式化寫入字符串。

fn='wformat.txt'
fw=open(fn,'w')
fw.write('%10s\t %3s\t %6s\n'%('name','age','sex'))
fw.write('%10s\t %3s\t %6s\n'%('張三',78,'male'))
fw.write('%10s\t %3s\t %6s\n'%('李四',50,'male'))
fw.write('%10s\t %3s\t %6s\n'%('王五',80,'male'))
fw.write('%10s\t %3s\t %6s\n'%('張強',90,'female'))
fw.close()

2,讀成列表

   文件的readlines函數可以將文本文件的若干行文本一一映射成列表的若干項,即文本文件的每一行映射成列表的一個數據項,每個數據項都是字符串。

fr=open('templist.txt','r')
print fr.readlines()
fr.close()

結果如下:

>>>
[' aaaaaaaa\n', ' bbbbbbbb\n', ' cccccccc']

3,讀成一行文件

   調用readline函數讀一行內容,而read函數是一次性將文件的內容全部讀回。另外,可以用strip函數去掉\n和空格。

fr=open('templist.txt','r')
print fr.readline().strip().strip('\n')
print fr.readline().strip().strip('\n')
print fr.readline().strip().strip('\n')
fr.close()

結果如下:

>>>
aaaaaaaa
bbbbbbbb
cccccccc

4,split格式化數據

fr=open('wformat.txt','r')
line1=fr.readline()
print line1
line2=fr.readline()
print line2
print line2.split('\t')
fr.close()

結果如下:

>>>
      name	 age	 sex
      張三	 78	 male
[' \xd5\xc5\xc8\xfd', ' 78', ' male\n']

讀取文件(格式化)的內容:

fr=open('wformat.txt','r')
while (1==1):
    line=fr.readline()
    if(line==''):
        break
    else:
        print line
fr.close()
>>> ================================ RESTART ================================
>>>
      name	 age	 sex
      張三	 78	 male
      李四	 50	 male
      王五	 80	 male
      張強	 90	 female
>>>

5,讀寫子目錄文件

   只需指定文件時描述好路徑即可,但是注意兩點:1)轉義字符的問題;2)不能創建文件夾,文件夾必須預先存在。

fn='c:\\test.txt' 
fp=open(fn,'w+') 
fp.write('www.python.com') 
fp.close()

三,字典及其基本操作

1,字典定義

   字典:由一對稱之爲鍵和值構成,用逗號間隔起來,用花括號括起來就構成了字典。語法結構:

                dict_name={key:value,key:value,key:value,……}

   字典的數據項的值可以是字典,列表等數據類型。

2,基礎操作

1)字典長度:

   len函數可以測得字典的數據項個數。

>>> dict1={'a':'b','name':'jeap',12:34}
>>> len(dict1)
3

2)元素值的訪問:

   Python的字典可以通過鍵獲取其所對應的值,而序列型數據字符串,列表則是通過index索引來獲取的。字典的元素的關係比較稀鬆,是無序的。

>>> dict1={'a':'b','name':'jeap',12:34}
>>> print dict1['a'],dict1[12]
b 34

3)元素值的修改:

   通過鍵獲取修改所對應的值。

 >>> dict1['a']='hello'
>>> print dict1
{'a': 'hello', 12: 34, 'name': 'jeap'}

4)元素項的刪除:

   通過del 字典名[鍵]來刪除字典裏的元素。

>>> del dict1[12]
>>> print dict1
{'a': 'hello', 'name': 'jeap'}

5)元素項的增加:

   通過字典名[新鍵]賦值的方式在字典裏新增一個數據項。

>>> dict1['QQ']='649414754'
>>> print dict1
{'a': 'hello', 'QQ': '649414754', 'name': 'jeap'}
>>> dict1['sex']='F'
>>> print dict1
{'a': 'hello', 'QQ': '649414754', 'name': 'jeap', 'sex': 'F'}

6)in運算:

   判斷某鍵是否存在於字典裏。

>>> 'name' in dict1
True
>>> 'F' in dict1
False

注意:in運算查找的是Key值,而非value值。

 

四,字典的相關函數

1)clear函數:清空字典數據項。

>>> print dict1
{'a': 'hello', 'QQ': '649414754', 'name': 'jeap', 'sex': 'F'}
>>> dict1.clear()
>>> print dict1
{}

2)copy函數:字典複製,與源對象間的關係是備份關係。

>>> dict1={'a': 'hello', 'QQ': '649414754', 'name': 'jeap', 'sex': 'F'}
>>> dict2=dict1.copy()
>>> print dict2
{'a': 'hello', 'QQ': '649414754', 'name': 'jeap', 'sex': 'F'}

3)get函數:獲取某鍵鎖對應的值,等價於dict_name[鍵]

>>> dict1.get('QQ')
'649414754'

4)keys函數:獲取字典所有的key。

>>> dict1.keys()
['a', 'QQ', 'name', 'sex']

5)values函數:獲取字典所有的value。

>>> dict1.values()
['hello', '649414754', 'jeap', 'F']

6)intems函數:獲取字典所有的key-value。

>>> dict1.items()
[('a', 'hello'), ('QQ', '649414754'), ('name', 'jeap'), ('sex', 'F')]

7)update函數:更新字典裏某鍵(key)的鍵值(value),如果更新的key原字典沒有,則update就向字典裏添加一項數據。

>>> new={'age':32}  #原字典沒有,新增
>>> add={'name':'張三'} #原字典存在,更新'jeap'爲'張三'
>>> dict1.update(new)
>>> dict1.update(add)
>>> print dict1
{'a': 'hello', 'QQ': '649414754', 'name': '\xd5\xc5\xc8\xfd', 'age': 32, 'sex': 'F'}

8)dict函數:創建字典。

   下面舉例三種創建字典的方法:

>>> d0=dict() #創建空字典
>>> print d0
{}
>>> d1=dict(name='zhangsan',QQ='123456789',age=23)#通過賦值創建字典
>>> print d1
{'QQ': '123456789', 'age': 23, 'name': 'zhangsan'}
>>> val=['lisi','649414754',25]
>>> print val
['lisi', '649414754', 25]
>>> key=range(1,4)
>>> d2=dict(zip(key,val))#使用一對列表創建字典
>>> print d2
{1: 'lisi', 2: '649414754', 3: 25}

9)pop和popitem函數:pop方法通過鍵key獲取其值value並從字典中刪除該數據項;popitem函數則是隨機移除一個數據項,返回值是元組。

>>> val=['Tom','Jack','Rose','John','Mark']
>>> key=range(1,6)
>>> dic=dict(zip(key,val))
>>> print dic
{1: 'Tom', 2: 'Jack', 3: 'Rose', 4: 'John', 5: 'Mark'}
>>> dic.pop(2)
'Jack'
>>> dic.popitem()
(1, 'Tom')
>>> print dic
{3: 'Rose', 4: 'John', 5: 'Mark'}

10)實踐應用:字典和for循環遍歷字典。

     i)通過in運算和鍵,來訪問字典的值。

>>> key=range(1,6)
>>> val=['Tom','Jack','Rose','John','Mark']
>>> dic=dict(zip(key,val))
>>> for x in dic:
 print dic[x]
 
Tom
Jack
Rose
John
Mark

     ii)通過items函數返回值爲(key,value)元組組成的列表來訪問。

>>> print dic.items()
[(1, 'Tom'), (2, 'Jack'), (3, 'Rose'), (4, 'John'), (5, 'Mark')]
>>> for (k,v) in dic.items():
 print 'dic[',k,']=',v
 
dic[ 1 ]= Tom
dic[ 2 ]= Jack
dic[ 3 ]= Rose
dic[ 4 ]= John
dic[ 5 ]= Mark
>>>

 五,小結

      本章主要介紹python開發的進階知識,文件的基本操作,字典的相關概念,基本操作運算和相關函數,爲以後實戰應用做一個鋪墊,本章存在的遺留問題是,如何調用不在同一目錄文件下的.py自定義模塊?按照書上的代碼未能實現。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章