python对于csv的解读:
CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。在 RFC 4180 规范推出的很多年前,CSV 格式就已经被开始使用了,由于当时并没有合理的标准,不同应用程序读写的数据会存在细微的差别。这种差别让处理多个来源的 CSV 文件变得困难。但尽管分隔符会变化,此类文件的大致格式是相似的,所以编写一个单独的模块以高效处理此类数据,将程序员从读写数据的繁琐细节中解放出来是有可能的。
在没有了解csv之前,一直都是使用openpyxl库来创建excel,然后保存数据。
这里就涉及到一个问题:第三方库,如果其他人并没有安装第三方库怎么办呢?这个问题很多人可能会发笑,让用户装一个不就好了,pip install openpyxl 一条命令解决的事。有没有一种可能性就是用户无法,或者不方便连接外网?亦或者用户根本不清楚安装命令,再或者安装过程如果出现问题呢?解决方法自然还有很多,比如直接打包为exe程序,如果用户还有输入,还要设计GUI界面,这不是大大复杂化了吗?
把用户当成傻子,你以为的入门的知识对很多不涉及这个方向的人而言就是很难理解,例如和windows小白谈powershell和cmd。很喜欢BeyondCompare这款工具,从来没有学习过工具的使用,但是拿来就能用,我觉得被它当成一个傻子挺好的。人生苦短,把更多时间腾出来给自己,哪怕是这时间用来发呆我也觉得是值得的。与人方便,于己方便。
能够使用标准库解决的问题,不要使用第三方模块。xml除外(因为我喜欢lxml,官方也指出xml不安全)。
如果仅仅是为了保存为excel可读,那么直接存csv,使用excel读取完全没有任何问题。
import csv
def read_csv():
with open('../res/demo.csv', newline="") as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row)
for key, value in row.items():
print(f"{key}:{value}")
def write_csv():
with open("../res/demo.csv", mode="w+", newline="") as csvfile:
# use DictWriter (easydict)
fieldnames = ["iso", "std_mean"]
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
iso_data = {"iso": 100, "std_mean": 0.332}
writer.writerow(iso_data)
try:
error_iso_data = {"iso": 999, "std_xxxx": 0.999}
writer.writerow(error_iso_data)
except ValueError:
print("ValueError: dict contains fields not in fieldnames: 'std_xxxx'")
# use writer
writer = csv.writer(csvfile)
iso_data = [[200, 0.356], [300, 0.443], [500, 0.558]]
writer.writerows(iso_data)
if __name__ == '__main__':
write_csv()
read_csv()
在写数据这块,有DictWriter和Writer,try中的代码就是会报错的地方,报错信息也就是print中的信息
基本上这两种写入方式足以满足大部分需求了,writerows和writerow相信很容易明白,一个写入多条数据,一个写入单条数据
python csv 模块的官方文档:https://docs.python.org/zh-cn/3/library/csv.html