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

https://blog.csdn.net/qq_35318838/article/details/80564938

原文地址:https://www.cnblogs.com/qi-yuan-008/p/11953788.html