文件读写的经典操作方式如下,通过内置的open函读取到每行内容,按照指定的分隔符进行分隔,然后对每一列的内容进行处理。这样的方式在处理制表符分隔的文件时,没什么问题,但是在处理csv文件时,会非常的头痛。CSV文件格式简单理解,是逗号分隔的纯文本,但是实际上非常灵活。在excel导出的csv文件中,会遇到某个字段内部出现了逗号的情况,这样的字符在两端添加双引号来进行区分,示意如下>>> with open('file.csv') as f:
... for line in f:
... print(line.rstrip().split(','))
...
['name', '"jack', 'rose"', '26']
而实际上,应该是3个字段。为了正确的处理csv格式,python内置了csv模块,专门用于读写csv格式的文件。读取csv文件的代码如下
>>> import csv
>>> with open('file.csv', newline='') as f:
... reader = csv.reader(f)
... for row in reader:
... print(row)
...
['name', 'jack,rose', '26']
可以看到,处理出来的格式和预期的一致,每一行的内容是一个列表。对于第一行为表头的csv文件
Name,Student,Age
name,"jack,rose",26
也可以通过DictReader方法来读取,代码如下
>>> with open('file.csv') as f:
... reader = csv.DictReader(f)
... for row in reader:
... print(row)
...
{'Name': 'name', 'Student': 'jack,rose', 'Age': '26'}
每一行的内容是一个dict, key为对应的表头。生成csv也有列表和字典两种写法
>>> import csv
>>> line = ['name', 'jack,rose', '26']
>>> with open('out.csv','w') as csvfile:
... f = csv.writer(csvfile)
... f.writerow(line)
...
21
>>> head = ['Name', 'Student', 'Age']
>>> line = {'Name': 'name', 'Student': 'jack,rose', 'Age': '26'}
>>> with open('dict.csv','w') as csvfile:
... f = csv.DictWriter(csvfile, fieldnames = head)
... f.writeheader()
... f.writerow(line)
...
21
对于csv文件,用csv模块来处理,可以保证结果的准确性,避免不必要的错误。
原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。
扫描下方二维码,关注我们,解锁更多精彩内容!