講的比較詳細的一篇文章。推薦,本文山寨於他。
python中有一個讀寫csv文件的包,直接import csv即可。利用這個python包可以很方便對csv文件進行操作。
CSV的操作就是對列表的操作。
1.導入模塊
import csv
2.寫入數據
寫入並生成csv文件
寫文件時會把列表中的元素寫入到csv文件中。
#python對csv讀寫練習範例代碼
import csv
#—————寫入csv
#文件頭,一般就是數據名
fileheader = ["name","score"]
#假設要寫入的兩行數據
d1 = ["wang","100"]
d2 = ["li","80"]
#寫入數據
csv_file = open('csv_test03.csv','w')
writer = csv.writer(csv_file)
#寫入的內容都是以列表的形式傳入函數
# writer.writerow(fileheader) #逐行寫入
# writer.writerow(d1)
# writer.writerow(d2)
writer.writerows([fileheader,d1,d2]) #一次寫入多行的函數writerows()
csv_file.close()
name | score | |
wang | 100 | |
li | 80 | |
追加寫入:
import csv
#需要添加的數據行
add_info = ['hoho','50']
#以添加的形式寫入文件,設定關鍵字“a”,表示追加
csv_file = open('csv_test03.csv','a')
#新建對象writer
writer = csv.writer(csv_file)
#寫入數據
writer.writerow(add_info)
csv_file.close()
name | score |
wang | 100 |
li | 80 |
hoho | 50 |
hoho | 50 |
以字典形式寫入DictWriter
import csv
csvFile = open("instance.csv", "w")
# 文件頭以列表的形式傳入函數,列表的每個元素表示每一列的標識
fileheader = ["name", "score"]
dict_writer = csv.DictWriter(csvFile, fileheader)
# 但是如果此時直接寫入內容,會導致沒有數據名,所以,應先寫數據名(也就是我們上面定義的文件頭)。
# 寫數據名,可以自己寫如下代碼完成:
dict_writer.writeheader()
# 之後,按照(屬性:數據)的形式,將字典寫入CSV文檔即可
dict_writer.writerow({"name": "Li", "score": "80"})
csvFile.close()
寫入數據時有空行的解決辦法:(使用python3)
改寫的代碼如下,就能正常寫入了
writefile = open('result.csv','w',newline =‘’) writer = csv.writer(writefile)
3.讀取數據
1 / DictReader讀取
import csv
csv_file = open('csv_test03.csv','r')
dict_reader = csv.DictReader(csv_file)
for row in dict_reader:
print(row)
輸出的結果是這樣的
OrderedDict([('name', 'wang'), ('score', '100')])
OrderedDict([('name', 'li'), ('score', '80')])
OrderedDict([('name', 'hoho'), ('score', '50')])
OrderedDict([('name', 'hoho'), ('score', '50')])
用DictReader輸出文件頭:
import csv
csv_file = open('csv_test03.csv','r')
dict_reader = csv.DictReader(csv_file)
res = dict_reader.fieldnames
print(res)
結果:
['name', 'score']
2 / 輸出成常見python字典對象
import csv
csv_file = open('csv_test03.csv','r')
dict_reader = csv.DictReader(csv_file)
#創建空字典
result = {}
#遍歷取值
for item in dict_reader:
result[item['name']] = item['score']
print(result)
結果:
{'wang': '100', 'li': '80', 'hoho': '50'}
python讀取文件事出錯:
'gbk' codec can't decode byte 0xad in position 2742: illegal multibyte sequence 錯誤的解決辦法:
使用notepad++將文件轉換成utf-8 無 BOM編碼格式後讀取
FILE_OBJECT= open('order.log','r', encoding='UTF-8')