天天看点

Python处理CSV 之 二

作者:洪较瘦不着调退役it人

上文件介绍了CSV的读写及基本知识

Python处理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.           
Python处理CSV 之 二

写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"
Python处理CSV 之 二

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'})           

看一下写入后的文件效果

Python处理CSV 之 二

使用更冬日的工具 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           
Python处理CSV 之 二
Python处理CSV 之 二

继续阅读