Contents
12.1. csv模块文件读写¶
12.1.1. 写入CSV数据,可以使用csv模块¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2020/5/6 13:09
# filename: sample01.py
import csv
headers = ['ID', 'UserName', 'Password', 'Age', 'Country']
rows = [(1001, "qiye", "qiye_pass", 24, "China"),
(1002, "Mary", "Mary_pass", 20, "USA"),
(1003, "Jack", "Jack_pass", 20, "USA"),
]
with open('qiye.csv', 'w', newline="") as f:
f_csv = csv.writer(f)
f_csv.writerow(headers)
f_csv.writerows(rows)
写入字典序列的数据
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2020/5/6 13:10
# filename: sample02.py
import csv
headers = ['ID', 'UserName', 'Password', 'Age', 'Country']
rows = [{'ID': 1001, 'UserName': "qiye", 'Password': "qiye_pass", 'Age': 24, 'Country': " China"},
{'ID': 1002, 'UserName': "Mary", 'Password': "Mary_pass", 'Age': 20, 'Country': "USA"},
{'ID': 1003, 'UserName': "Jack", 'Password': "Jack_pass", 'Age': 20, 'Country': "USA"},
]
with open('qiye2.csv', 'w') as f:
f_csv = csv.DictWriter(f, headers)
f_csv.writeheader()
f_csv.writerows(rows)
写入普通数据
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/10 21:24
# filename: 操作写csv文件.py
import csv
with open("sr.csv", "w") as f:
w = csv.writer(f, delimiter=",")
w.writerow(["one", "two", "three"])
w.writerow(["four", "five", "six"])
12.1.2. 读取csv文件数据¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2020/5/6 13:11
# filename: sample03.py
import csv
with open('qiye.csv') as f:
f_csv = csv.reader(f)
headers = next(f_csv)
print(headers)
for row in f_csv:
print(row)
使用命名元组 可以一一对应显示
from collections import namedtuple
with open('stocks.csv') as f:
f_csv = csv.reader(f)
headings = next(f_csv)
Row = namedtuple('Row', headings)
f_csv = [f_csv for f_csv in f_csv if f_csv]
for r in f_csv:
row = Row(*r)
print(row)
将数据读取到一个字典序列中
import csv
with open('stocks.csv') as f:
f_csv = csv.DictReader(f)
for row in f_csv:
print(row)
先读取csv文件,再将读取的数据处理后写入新的csv中
with open("villains", "r", encoding="gbk") as f:
reader = csv.reader(f)
with open("villains_bak", "w", newline="", encoding="gbk") as wf:
writer = csv.writer(wf,delimiter='\t') #采用水平制表符分割
for row in reader:
print("|".join(row))
writer.writerow(row) #通过写入器writer对象的方法写入
案例1¶
准备文件 test.csv
1,软件工程,胡建力,机械工业出版社,199407226517,2
2,汇编语言,胡建力2,北京工业大学出版社,199407126517,2
3,计算机语言,胡建力3,经济科学出版社,199417126517,1
4,FLASH精选,胡建力4,中国纺织出版社,199417126511,3
5,JAVA基础,胡建力5,电子工业出版社,199117126511,3
6,JAVA程序设计,胡建力6,世界出版社,199117126512,2
7,新东方英语,胡建力7,外语出版社,192117126512,1
读取csv文件¶
csv_read.py
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/22 18:46
# filename: CSV数据交换格式-读.py
# reader()函数 读
import csv
with open("test.csv", "r", encoding="utf-8") as rf:
reader = csv.reader(rf, dialect=csv.excel)
for row in reader:
print("|".join(row))
输出信息
1|软件工程|胡建力|机械工业出版社|199407226517|2
2|汇编语言|胡建力2|北京工业大学出版社|199407126517|2
3|计算机语言|胡建力3|经济科学出版社|199417126517|1
4|FLASH精选|胡建力4|中国纺织出版社|199417126511|3
5|JAVA基础|胡建力5|电子工业出版社|199117126511|3
6|JAVA程序设计|胡建力6|世界出版社|199117126512|2
7|新东方英语|胡建力7|外语出版社|192117126512|1
同时读取和写入csv文件¶
读取—写入—读取
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/22 18:57
# filename: CSV数据交换格式-写.py
# writer()函数
# 先读取csv文件,再将读取的数据处理后写入新的csv中
import csv
headers = ['编号', '书名', '作者', '出版社', '出版时间', '级别']
rows = [
"10,软件工程1,胡建力,机械工业出版社,199407226517,2",
"11,汇编语言1,胡建力2,北京工业大学出版社,199407126517,2",
"12,计算机语言1,胡建力3,经济科学出版社,199417126517,1",
"13,FLASH精选1,胡建力4,中国纺织出版社,199417126511,3",
"14,JAVA基础1,胡建力5,电子工业出版社,199117126511,3",
"15,JAVA程序设计1,胡建力6,世界出版社,199117126512,2",
"16,新东方英语1,胡建力7,外语出版社,192117126512,1"
]
with open("test.csv", "r", encoding="utf-8") as rf:
reader = csv.reader(rf)
print("开始读取test.csv文件内容......................")
with open("test_bak.csv", "w", newline="", encoding="utf-8") as wf:
writer = csv.writer(wf, delimiter=",")
header = ["|".join(headers)]
print("开始写入标题header 到test_bak.csv文件......................")
writer.writerow(header)
print("开始写入文件旧数据 到test_bak.csv文件......................")
for row in reader:
# print(row)
writer.writerow(row)
rows_list = [str(row).split(",") for row in rows]
print("开始写入新的数据 到test_bak.csv文件......................")
for row_new in rows_list:
writer.writerow(row_new)
print("读写完毕,查看写入后的内容................")
with open("test_bak.csv", "r", encoding="utf-8") as rf:
reader = csv.reader(rf)
for info in reader:
print("|".join(info))
输出信息
开始读取test.csv文件内容......................
开始写入标题header 到test_bak.csv文件......................
开始写入文件旧数据 到test_bak.csv文件......................
开始写入新的数据 到test_bak.csv文件......................
读写完毕,查看写入后的内容................
编号|书名|作者|出版社|出版时间|级别
1|软件工程|胡建力|机械工业出版社|199407226517|2
2|汇编语言|胡建力2|北京工业大学出版社|199407126517|2
3|计算机语言|胡建力3|经济科学出版社|199417126517|1
4|FLASH精选|胡建力4|中国纺织出版社|199417126511|3
5|JAVA基础|胡建力5|电子工业出版社|199117126511|3
6|JAVA程序设计|胡建力6|世界出版社|199117126512|2
7|新东方英语|胡建力7|外语出版社|192117126512|1
10|软件工程1|胡建力|机械工业出版社|199407226517|2
11|汇编语言1|胡建力2|北京工业大学出版社|199407126517|2
12|计算机语言1|胡建力3|经济科学出版社|199417126517|1
13|FLASH精选1|胡建力4|中国纺织出版社|199417126511|3
14|JAVA基础1|胡建力5|电子工业出版社|199117126511|3
15|JAVA程序设计1|胡建力6|世界出版社|199117126512|2
16|新东方英语1|胡建力7|外语出版社|192117126512|1
读写csv文件的示例¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/7/28 20:39
# filename: csv文件操作.py
import csv
with open('pingan.csv', 'r') as rf:
reader = csv.reader(rf)
with open('pingan2.csv', 'w') as wf:
writer = csv.writer(wf)
headers = next(reader)
writer.writerow(headers)
for row in reader:
if row[0] < '2016-01-01':
break
if int(row[5]) >= int(50000000):
writer.writerow(row)
python3写入csv文件中文乱码的解决¶
加入encoding='utf-8-sig'就不会乱码了
with open("haha.csv",'w',newline='',encoding='utf-8-sig') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["飞机转场记录号", "登机口"])
csv操作函数¶
#!/usr/bin/env python
#-*- coding:utf8 -*-
import csv
# 将数据写入csv文件
def write_csv_file(path, head, data):
'''
:param path: CSV文件的路径和文件名
:param head: 生成的CSV文件的文件头
:param data: data为需要写入CSV文件的数据,也需要传入一个列表
:return:
'''
try:
with open(path, "w", newline='') as csv_file:
writer = csv.writer(csv_file, dialect='excel')
if head is not None:
writer.writerow(head)
for row in data:
writer.writerow(row)
print("Write a CSV file to path %s Successful." % path)
except Exception as e:
print("Write an CSV file to path: %s, Case: %s" % (path, e))
12.1.3. CSV格式转换成JSON格式¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# @auther: 18793
# @Date: 2020/6/8 9:44
# @filename: sample01.py
# @Email: 1879324764@qq.com
# @Software: PyCharm
import sys
import json
# reload(sys)
def list_name(keyname, value1, dict1=None):
dict1 = dict(zip(keyname, value1))
return dict1
with open("address.csv", 'r') as f:
for line in f:
if line == []:
line = ""
else:
if line[-1] == "\n":
line = line[:-1]
if line[-1] == "\r":
line = line[:-1]
akk = [y for y in line.split(" ")]
key1 = ['street', 'namefirst', 'address']
a1 = {}
arr = list_name(key1, akk, a1)
arr = json.dumps(arr)
print(arr)