上文件介绍了CSV的读写及基本知识
CSV复杂一点的处理
有这样一个CSV文件内容如下 姓名 部门 生日 月 4个字段
name,department,birthday month
John Smith,Accounting,November
Erica Meyers,IT,March
读取这个文件后想自定义处理一下输出
import csv
with open('employee_birthday.txt', mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are {", ".join(row)}')
line_count += 1
print(f'\t{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.')
line_count += 1
print(f'Processed {line_count} lines.')
Column names are name, department, birthday month
John Smith works in the Accounting department, and was born in November.
Erica Meyers works in the IT department, and was born in March.
Processed 3 lines.
写SSV的复杂例子
import csv
with open('employee_file.csv', mode='w') as employee_file:
employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
employee_writer.writerow(['John Smith', 'Accounting', 'November'])
employee_writer.writerow(['Erica Meyers', 'IT', 'March'])
employee_writer = csv.writer(employee_file,
delimiter=',',
quotechar='"',
quoting=csv.QUOTE_MINIMAL)
- csv.QUOTE_MINIMA 引用那些包含特殊字符的字段,例如分隔符、引号字符或任何行终止符中的字符。
- delimiter 默认情况 是 , 逗号分隔
employee_writer.writerow(['John Smith', 'Accounting', ',November'])
,November 这个值包含一个逗号
看一下写入文件后的效果,整个字符串加了一个引号来包裹,这也是CSV的标准之一。
- John Smith,Accounting,",November"
CSV文件首行写入标题
我们知道通常CSV中第一个会给一个标题行,表示每一行的数据的含义解释,当然 这不是必要的。只是看业务上的需求
import csv
with open('employee_file2.csv', mode='w') as csv_file:
fieldnames = ['emp_name', 'dept', 'birth_month']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})
writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})
看一下写入后的文件效果
使用更冬日的工具 pandas来处理CSV
import pandas
df = pandas.read_csv('hrdata.csv')
print(df)
emp_name dept birth_month
0 John Smith Accounting November
1 Erica Meyers IT March