CSV 逗号分隔值 (Comma-Separated Values,CSV,也称为字符分隔值,分隔字符也可以不是逗号)。

其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。

CSV文件 由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是 逗号 制表符

通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用word或记事本来开启,再则先另存新档后用excel开启,也是方法之一。

2. Write CSV

2.1 list

使用列表生成csv

  • open()
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 导入CSV安装包
import csv
# 1. 创建文件对象
f = open('文件名.csv','w',encoding='utf-8')
# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)
# 3. 构建列表头
csv_writer.writerow(["姓名","年龄","性别"])
# 4. 写入csv文件内容
csv_writer.writerow(["l",'18','男'])
csv_writer.writerow(["c",'20','男'])
csv_writer.writerow(["w",'22','女'])
# 5. 关闭文件
f.close()
 

一维列表数据,直接for循环写入

注意:最后一定 file.close():关闭文件流,确保写入数据成功。

  • with()
import csv
keys=['a','b','c','d']
data=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
with open('data.csv','w') as file:
	writer=csv.writer(file) # 建立csv写入对象
	writer.writerow(keys) # 调用writerow函数写入一行数据(表头)
	for row in data:
		writer.writerow(row)

若写入的数据是二维列表,可以使用 writerows() 方法一次写入多行。

with open('data.csv','w') as file:
	writer=csv.writer(file)
	writer.writerow(keys)
	writer.writerows(data)

2.2 dict

字典生成csv

import csv
data=[{'a':1,'b':2,'c':3},{'a':4,'b':5,'c':6},{'a':7,'b':8,'c':9}]
fieldnames=['a', 'b', 'c']  # 列名列表,即字典的key值列表
with open('data.csv','w', newline='') as file:
	writer = csv.DictWriter(file, fieldnames=fieldnames)  # 建立一个字典写入对象,并指定列名fieldnames
	writer.writeheader()  # writeheader()生成表头即列名 filednames
	writer.writerows(data)  # 一次写入多行,也可使用writerow()写入单行(for循环)

3. Read CSV

3.1 list

将csv读取为列表

with open('data.csv','r') as file:
	reader = csv.reader(file)
	for row in reader:
		print(row)	
['a', 'b', 'c']
['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
 

可以使用 list.append(),整合每行数据

3.2 dict

data=[]
with open('data.csv','r') as file:
	reader = csv.DictReader(file)
	fieldnames = reader.fieldnames  # 获取表头
	print(fieldnames)
	for row in reader:  # 获取每一行数据
		data.append(dict(row))
	print(data)
['a', 'b', 'c']
[{'a': '1', 'b': '2', 'c': '3'}, {'a': '4', 'b': '5', 'c': '6'}, {'a': '7', 'b': '8', 'c': '9'}]

4. CSV空行问题解决

4.1 Python2 解决

将写入方式w,修改成wb

f = open('文件名.csv', 'wb', encoding='utf-8')

4.2 Python3 解决

Python2的解决方式也支持,同时也可以添加参数newline=' '即可,如下所示:

f = open('文件名.csv', 'wb', encoding='utf-8', newline='')
                    Python操作csv文件1. What's CSV2. Write CSV2.1 list2.2 dict3. Read CSV3.1 list3.2 dict4. CSV空行问题解决4.1 Python2 解决4.2 Python3 解决1. What’s CSVCSV:逗号分隔值(Comma-Separated Values,CSV,也称为字符分隔值,分隔字符也可以不是逗号)。保存形式其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被
csv_writer.writerow(["a", 'b', 'c'])
csv_writer.writerow(["1", '2', '3'])
csv_writer.writerow(["a", 'b', 'c'])
会出现打开后的Excel中每隔一行出现空行:(如下图)
所以解决办法可以为:
flags = tf.app.flags
flags.DEFINE_string("train_file_address","D:/NLPWORD/cut_word_test/hzytest.csv","添加训练数据文件")
flags.DEFINE_string("resu
				
问题:在使用 Python 将爬取的数据存储为 CSV 文件时,打开会发现每两行数据之间多一行空白行,这样在导入到数据库的时候就会出现多很多 NULL 数据,解决方法有两个,一个是在爬取之后处理,另一种是在爬取时处理,这里采取后一种(比较简单~博主比较懒)。 问题图:
网上有很多类似例子,但很多在VC6.0环境下不能使用, 例子在《把脉VC++》第6章源码基础上进行修改。主要修改内容包括:vc6.0中GetCount()没有,用GetSize代替;Tokenize采用AfxExtractSubString进行代替;书中源码在VC6.0环境下不能直接使用,但是整个编程思想还是很值得借鉴。在此向原作者致敬。例子主要功能包括: 1、实现对test.csv文件读写(例子主要是读); 2、可以辨别CSV文件中的注释行(例子以符号“;”为注释行); 3、可以剔除空行; 注:由于本人非编程专业,代码不一定简洁,非喜勿喷,有问题可联系,共同探讨。
read_csv是pandas库中用于读取csv文件的函数,其定义为: pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, dtype=None, skiprows=None, skipfooter=0, na_values=None, parse_dates=False, infer_datetime_format=False, keep_date_col=False, dayfirst=False, date_parser=None, nrows=None, skip_blank_lines=True, verbose=False, encoding=None, squeeze=False, thousands=None, decimal='.') 其中,常用的参数含义如下: - filepath_or_buffer:csv文件路径或文件对象 - sep:分隔符,默认为逗号 - delimiter:分隔符,与sep参数作用相同 - header:指定哪一行作为表头,默认为第一行 - names:指定列名 - index_col:指定索引列 - usecols:指定要读取的列 - dtype:指定数据类型 - skiprows:跳过指定行数 - na_values:指定缺失值 - parse_dates:是否解析日期,默认为False - nrows:读取的行数 - encoding:指定编码方式 以上是常用的参数,还有其他参数可以参考pandas官方文档。