python读写csv文件 和 OSError: Initializing from file failed
1. 通过pandas包
读csv:pd.read_csv
import pandas as pd csv_data = pd.read_csv(r'test.csv', engine='python',encoding='utf-8') #此时得到的数据是pandas的dataframe格式数据,需要使用对应操作读取数据
写csv:df.to_csv 方法
#可通过字典实现,列表传参 id_value = [1,2,3] name_value = ['Jack','Tom','Bob'] dict_data = {'id':id_value,'name':name_value} #字典中的key值即为csv中列名 data_frame = pd.DataFrame(dict_data) #将DataFrame存储为csv,index表示是否显示行名,default=True,path指写入的文件名称 data_frame.to_csv('test.csv', index=True, sep=',')
附加:通过df.to_excel() 写入excel文件:
#可通过字典实现,列表传参 id_value = [1,2,3] name_value = ['Jack','Tom','Bob'] dict_data = {'id':id_value,'name':name_value} #字典中的key值即为csv中列名 data_frame = pd.DataFrame(dict_data) data_frame.to_excel(file_name+'.xlsx', sheet_name="sheet1", index= False)
2. 如果使用pd.read_csv读取csv文件时,出现Error如下:OSError: Initializing from file failed
原因有可能是:
一是path的参数是路径而不是文件名 —— 解决方法:在pd.read_csv的参数传递时加上文件名,例如:...\*.csv。
二是path的参数带有中文,导致解析失败 —— 解决方法:要么全改成英文路径,要么读取时使用engine='python'参数:pd.read_csv('...\*.csv',engine='python')。
3. 通过csv包
可以每次只写一行(可用于写入表头,即第一行):writerow 方法
import csv def create_csv(): path = "test.csv" with open(path,'w', newline='') as f: csv_write = csv.writer(f) csv_head = ["id","name"] #通过列表传参 csv_write.writerow(csv_head)
写入多行:writerows 方法
def write_csv_rows(): path = "test.csv" with open(path,'w', newline='') as f: csv_write = csv.writer(f) data_rows = [[1,'Jack'],[2,'Tom']] #通过列表中包含列表的形式 list的extend()方法可实现 csv_write.writerows(data_rows)
同时写表头和数据
# 传入参数 csv_path, csv_head, csv_data def write_csv(csv_path, csv_head, csv_data): with open(csv_path,'w', newline='') as f: csv_write = csv.writer(f) csv_write.writerow(csv_head) csv_write.writerows(csv_data)
一行行读出数据:reader 方法
def read_csv(): path = "test.csv" with open(path,"r") as f: csv_read = csv.reader(f) for line in csv_read: print(line)
也可将读取的数据每一行变成一个list,整体数据变成一个大的list,再取某一行
import csv with open('test.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f) data= list(reader) print(data[0]) #取第一行。一般第一行是列名;从第二行开始是数据 print(len(data)) #数据长度
参考:
https://blog.csdn.net/lwgkzl/article/details/82147474