前言
csv文件数据的典型特征是以逗号为分隔符(注意是英文逗号’,’)。这里简单介绍利用python的csv库对csv文件进行读写,主要分为列表和字典的形式。官方介绍传送地址:https://docs.python.org/zh-cn/3/library/csv.html
针对有列标题的csv文件,建议使用DictReader/DictWriter进行读写。
1、DictReader
a.读某一列:
def read_csv_col(file_path, label):
'''
读取csv文件的某一列数据,csv文件的第一行为列名
:param file_path: 文件路径
:param label: 某一列的列名(第一行)
:return: 指定列的所有数据(列表形式)
'''
col = list()
with open(file_path,encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
cell = row[label]
col.append(cell)
return col
if __name__ == '__main__':
file_path='./datas/test.csv'
results=read_csv_col(file_path,'姓名')
print(results)
测试文件:
控制台输出结果:
b.读整个文件内容:
def read_csv_dict(file_path):
'''
读取csv文件的所有,csv文件的第一行为列标题
:param file_path: 文件路径
:return: 所有行的数据(每一行为字典,字典的key为列标题)
'''
rows= list()
with open(file_path,encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
new_row=dict()
for label in row:
new_row[label]=row[label]
rows.append(new_row)
return rows
if __name__ == '__main__':
file_path='./datas/test.csv'
results=read_csv_dict(file_path)
print(results)
文件内容:
控制台输出
2、DictWriter
追加写入字典形式的数据
#writer
def write_csv_row(filename, row):
'''
追加写入csv文件
:param filename: 文件路径
:param row: 待写入的行(列表)
:return: 无
'''
with open(filename, "a", newline='', encoding="utf-8") as out:
csv_write = csv.writer(out, dialect='excel')
csv_write.writerow(row)
if __name__ == '__main__':
file_path='./datas/test1.csv'
dicts=[{'name':'Nancy','age':20,'address':'China'},
{'name':'Lili','age':18,'address':'UK'},
{'name':'Bob','age':22,'address':'US'}]
labels=['name','age','address']
write_csv_dict(file_path,labels,dicts)
生成文件内容:
3、reader
读取所有数据,每一行的值以列表形式返回
def read_csv_all(filename, read_head_row=True):
'''
读取csv文件的所有行列数据
:param filename: 文件路径
:param read_head_row: 是否读取第一行,默认是
:return: 所有行所有列数据(每一行为单独的列表)
'''
rows = list()
with open(filename) as f:
reader = csv.reader(f)
if not (read_head_row):
next(reader)
for row in reader:
rows.append(row)
return rows
if __name__ == '__main__':
file_path='./datas/test.csv'
result=read_csv_all(file_path,False)
print(result)
文件内容:
控制台输出
4、writer
追加写入一行
def write_csv_row(file_path, row):
'''
追加写入csv文件
:param file_path: 文件路径
:param row: 待写入的行(列表)
:return: 无
'''
with open(file_path, "a", newline='', encoding="utf-8") as out:
csv_write = csv.writer(out, dialect='excel')
csv_write.writerow(row)
if __name__ == '__main__':
file_path='./datas/test1.csv'
row=['小明',24,'Japan']
write_csv_row(file_path,row)
执行结果,文件内容: