1、open文件打開和with open as 文件打開的區別python
1 file= open("test.txt","r") 2 try: 3 for line in file.readlines(): 4 print(line) 5 except: 6 print("error") 7 finally: 8 file.close()
1 with open("test.txt","r") as file: 2 for line in file.readlines(): 3 print(line)
用with語句的好處,就是到達語句末尾時,會自動關閉文件,即使出現異常。spa
with語句其實是一個很是通用的結構,容許你使用所謂的上下文管理器。上下文管理器是支持兩個方法的對象:__enter__和__exit__。code
方法__enter__不接受任何參數,在進入with語句時被調用,其返回值被賦給關鍵字as後面的變量。對象
方法__exit__接受三個參數:異常類型、異常對象和異常跟蹤。它在離開方法時被調用(經過前述參數將引起的異常提供給它)。若是__exit__返回False,將抑制全部的異常。blog
文件也可用做上下文管理器。它們的方法__enter__返回文件對象自己,而方法__exit__關閉文件it
with語句做用效果至關於上面的try-except-finallyclass
2、csv文件的讀取test
1 with open('test.csv', 'r') as csv_file: 2 reader = csv.reader(csv_file) 3 #print(list(reader)) 4 for item in reader: #按行讀取 5 print (item)
>>> list(reader)---> [['name','age'], ['Bob','14'], ['Tom','23'], ...] >>> item --> ['name','age'] ['Bob','14'] ['Tom','23'] ...
3、csv文件的寫入import
1 import csv 2 header = ['name','age'] 3 data = [ 4 ['Bob',14], 5 ['Tom',23], 6 ['Jerry',18] 7 ] 8 with open('test.csv', 'w', newline='')as csv_file: 9 csv_writer = csv.writer(csv_file) 10 csv_writer.writerow(header) 11 # csv_writer.writerows(data) # 寫入多行 12 for row in data: 13 csv_writer.writerow(row) # 單行寫入
指定newline='',則能夠避免每寫入一行就寫入一空行。
4、DictReader和DictWriter操做csv變量
使用DictReader能夠像操做字典那樣獲取數據,把表的第一行(通常是標頭)做爲key。可訪問每一行中那個某個key對應的數據。
1 with open('test.csv', 'r')as csv_file: 2 dict_reader = csv.DictReader(csv_file) 3 name_list = [row['name'] for row in dict_reader] 4 print(name_list) 5 print(len(list(dict_reader)))
>>> ['Bob', 'Tom', 'Jerry']
>>> 0
dict_reader只能迭代一次
1 header = ['name', 'age'] 2 data = [ 3 {'name': 'Bob', 'age': 14}, 4 {'name': 'Tom', 'age': 23}, 5 {'name': 'Jerry', 'age': 18} 6 ] 7 with open('test.csv', 'w', newline='')as csv_file: 8 dict_writer = csv.DictWriter(csv_file, header) 9 dict_writer.writeheader() 10 dict_writer.writerows(data) # 寫入多行 11 for row in data: 12 dict_writer.writerow(row) # 單行寫入