1. 程式人生 > >檔案輸入輸出及csv檔案

檔案輸入輸出及csv檔案

讀取檔案

fileobject=open('b.txt')
result=fileobject.read()
print(result)
fileobject.close()

測試結果如下圖所示:

寫入檔案:

fileobject=open('c.txt',mode='w')
fileobject.write('hello,world.您好')
fileobject.flush()   #清空緩衝區
fileobject.close()
print('寫入成功...')
fileobject=open('c.txt')
result=fileobject.read()
print(result)
fileobject.close()

測試結果如下圖所示:

使用上下文管理器讀取檔案

#context manager 上下文管理器 with
with open('b.txt','r') as f:
    result =f.read()
    print(result)

測試結果如下圖所示:

一行及多行的讀取:

#讀取一行
#context manager 上下文管理器 with
with open('b.txt','r') as f:
    result =f.readline()
    print(result)
print('-------------------------')    
#讀取多行
#context manager 上下文管理器 with
with open('b.txt','r') as f:
    result =f.readlines()
    
print(result)  

測試結果如下圖所示:

f.readlines()是一次性讀完所有的行,存到記憶體中就關閉f ,缺點是一次讀完比較耗記憶體,對於大檔案不適用

#一行一行輸出
with open('b.txt','r') as f:
    #enumerate 列舉,集合
    for i,line in enumerate(f.readlines()):
        print(str(i+1),'->',line)

測試結果如下圖所示:

#一行一行輸出
with open('b.txt','r') as f:
    #enumerate 列舉,集合
    for line in f:
        print(line) 

f是一次讀一行,在迴圈中是沒有關閉 這種缺點就是在讀取的使用佔用此文字,別人無法操作此文字
測試結果如下圖所示:

從一個檔案讀取資料並寫入另一個檔案
with open('b.txt') as b:
    with open('f.txt','w') as f:   
        for line in b.readlines():
            f.write(line)  
with open('f.txt','r') as f:
    #enumerate 列舉,集合
    for line in f:
        print(line) 

如果沒有f.txt檔案,則建立,w表示覆蓋原有的文字
測試結果如下圖所示:
尋找文本里面的位置,可以在下載時候使用

fileobject=open('b.txt','a')
print('當前位置:'+str(fileobject.tell())  )
fileobject.seek(fileobject.tell()+1)
fileobject.write('膠水')
fileobject.flush()
fileobject.close()

測試結果如下圖所示:
讀取csv檔案

import csv
with open('a.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print (row)

測試結果如下圖所示:
向csv檔案中寫入資料

import csv
with open('myfile.csv','w') as f:
    writer=csv.writer(f)
    writer.writerows(  ['1','a','30']  )
    l=[['2','b','30'],['3','ww','30']]
    writer.writerows(l)
import csv
with open('a.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print (row)  

測試結果如下圖所示:

輸出的時候發現每一行都會有空格,這是可以在open()方法裡面加入一個引數newline=’’

import csv
with open('myfile.csv','w',newline='') as f:
    writer=csv.writer(f)
    writer.writerows(  ['1','a','30']  )
    l=[['2','b','30'],['3','ww','30']]
    writer.writerows(l)
import csv
with open('myfile.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print (row)  

測試結果如下圖所示:

自己建立一個csv,這個csv用|來分割

with open('b.csv','r') as csvfile:
    spamreader = csv.reader(csvfile,delimiter='-')
    for row in spamreader:
        print(row)

測試結果如下圖所示:
方言的定義及使用

#定義一個方言
print(csv.list_dialects())
#註冊新方言
csv.register_dialect('zydialect',delimiter='-')
print(csv.list_dialects())
#使用一個定義的方言
with open('b.csv','r') as csvfile:
    spamreader=csv.reader(csvfile,dialect='zydialect')
    for row in spamreader:
        print(row)

測試結果如下圖所示: