1、实例
1、这个是我手动创建的csv文档,内容是从Word复制粘贴到表格
2、这是我读取数据用的代码
import csvfile = open(r"C:\Users\Administrator\Desktop\cs1.csv","r",errors="ignore",encoding="utf-8")
csv_file = csv.reader(file)for i in csv_file:print(i)
file.close()读取的结果:
['ID\t\tӢģ\t\tCODE']
['SP91FD79GFQU\t\tAndorra la Vella\t\tAD']
['THM3PVJHX1G2\tAr Ruways\tAr Ruways\t\tAE ']
有图中结果可以看出,打出出来的结果不仅没有了中文,并且每一个列结果后面都多了一个"\t"
3、在网上找了一些资料发现代码是没问题的,于是想着重新创建了一个数据,并且手动输入数据(表名为cs.csv,数据是一样的)
代码及结果如下:
import csvfile = open(r"C:\Users\Administrator\Desktop\cs.csv","r",errors="ignore")
csv_file = csv.reader(file)for i in csv_file:print(i)
file.close()结果:
['城市ID', '城市名', '城市名(英文)', '国家', '国家CODE ']
['SP91FD79GFQU', '安道尔', 'Andorra la Vella', '安道尔', 'AD ']
['THM3PVJHX1G2', 'Ar Ruways', 'Ar Ruways', '阿联酋', 'AE ']
与上面的对比可以发现,最后一个csv数据是手动重新创建的,“\t”的就没有了,可能是Word复制粘贴进去导致的问题;然后中文显示,取消了encoding="utf-8"之后,结果才正常显示了中文,看到网上介绍还需要加上这个,不清楚原因
2、csv的一些常用手法
1、使用reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容下面的代码可以读取csv的全部内容,以行为单位
import csvpath = r"C:\Users\Administrator\Desktop\cs.csv"
file = open(path,"r",errors="ignore")
csv_file = csv.reader(file)for i in csv_file:print(i)
file.close()结果:
['城市ID', '城市名', '城市名(英文)', '国家', '国家CODE ']
['SP91FD79GFQU', '安道尔', 'Andorra la Vella', '安道尔', 'AD ']
['THM3PVJHX1G2', 'Ar Ruways', 'Ar Ruways', '阿联酋', 'AE ']
2、提取其中某一列可以使用下面的方法
import csvpath = r"C:\Users\Administrator\Desktop\cs.csv"
file = open(path,errors="ignore")
csv_file = csv.reader(file)
column = [row[0] for row in csv_file]
print(column)
file.close()结果:
['城市ID', 'SP91FD79GFQU', 'THM3PVJHX1G2']
3、读取前多少行
path = r"C:\Users\Administrator\Desktop\cs.csv"
eFile = open(path)
#读取csv文件
eReader=csv.reader(eFile)
#遍历csv对象获取数据,每一条数据都是一个list,每一列是list中的一个元素
#line_num是行号,这里只读取前100行
for row in eReader:if eReader.line_num <= 1:print('行 '+str(eReader.line_num) + ': '+str(row)) #打印行号else:break
#关闭文件
eFile.close()结果:
行 1: ['城市ID', '城市名', '城市名(英文)', '国家', '国家CODE ']
4、 从列表写入csv文件,设置newline,否则两行之间会空一行
import csvl1 = ["1","2","3"]
path = r"C:\Users\Administrator\Desktop\cs3.csv"
file = open(path,'w',newline='')
writer = csv.writer(file)
m = len(l1)
for i in range(m):writer.writerow(l1[i])
file.close()结果:
5、使用列表多行写入
import csvl1 = ['城市ID', '城市名', '城市名(英文)', '国家', '国家CODE ']
l2 = ['SP91FD79GFQU', '安道尔', 'Andorra la Vella', '安道尔', 'AD ']
l3 = ['THM3PVJHX1G2', 'Ar Ruways', 'Ar Ruways', '阿联酋', 'AE ']
path = r"C:\Users\Administrator\Desktop\cs4.csv"with open(path, 'w',newline='') as csvFile:writer = csv.writer(csvFile)# 写入多行用writerowswriter.writerows([l1, l2, l3])结果:
6、从字典写入csv文件
import csvpath = r"C:\Users\Administrator\Desktop\cs5.csv"
dic = {'张三': 123, '李四': 456, '王二娃': 789}
csvFile3 = open(path, 'w', newline='')
writer2 = csv.writer(csvFile3)
for key in dic:writer2.writerow([key,dic[key]])
csvFile3.close()结果: