python讀寫csv文件的正確方式

1. 讀取csv文件
準(zhǔn)備數(shù)據(jù)data.csv
name,age
小明,14
小剛,15
通常,我們用下面的代碼讀取csv
import csv
with open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f:
reader = csv.reader(f)
headers = next(reader)
print(headers)
for row in reader:
print(row)
程序輸出結(jié)果
['name', 'age']
['小明', '14']
['小剛', '15']
我們完全可以像讀取txt文件那樣去讀取csv文件,但那樣讀取到的數(shù)據(jù)一行就是一個字符串,還需你自己進(jìn)行一次split操作才能將數(shù)據(jù)分隔開,因此我建議你使用csv模塊讀取csv文件。
上面的讀取方法,有一個讓人感到難受的地方,每一行數(shù)據(jù)雖然都是以列表的形式返回,可如果你想獲取一行中的某一列數(shù)據(jù),就只能通過列表的索引,這樣并不方便。
針對這個需求,可以使用namedtuple
import csv
from collections import namedtuple
with open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f:
reader = csv.reader(f)
headers = next(reader)
Row = namedtuple('Row', headers)
for row in reader:
row = Row(*row)
print(row.name, row.age)
這樣可以非常方便的獲取一行數(shù)據(jù)中的某一列數(shù)據(jù)。
2. 寫csv文件
2.1 普通方法寫csv文件
用csv模塊寫csv文件,主要用到writerow和writerows這兩個方法,前者是寫入一行,后者是寫入多行。
import csv
headers = ['name', 'age']
row_1 = ['小明', '14']
row_2 = ['小剛', '15']
with open("data.csv", "w", encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(headers)
writer.writerows([row_1, row_2])
在打開文件時,一定要設(shè)置encoding='utf-8' 否則中文無法正常顯示,另外要設(shè)置newline='',否則就會在兩行數(shù)據(jù)之間間隔一個空行。
csv文件是文本文件,因此你完全可以拋開csv模塊,單純的用寫文本文件的方法來寫csv文件
headers = ['name', 'age']
row_1 = ['小明', '14']
row_2 = ['小剛', '15']
with open("data.csv", "w", encoding='utf-8') as csvfile:
csvfile.write(','.join(headers) + "\n")
csvfile.write(','.join(row_1) + "\n")
csvfile.write(','.join(row_2))
2.2 用pandas寫csv文件
使用pandas寫csv文件需要先創(chuàng)建dataframe對象
import pandas as pd
headers = ['name', 'age']
row_1 = ['小明', '14']
row_2 = ['小剛', '15']
df = pd.DataFrame([row_1, row_2], columns=headers)
df.to_csv("data.csv", index=False, sep=',')
效果與csv模塊寫文件是一樣的
評論
圖片
表情
