zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    html5--html实现乘法口诀表
    html5--switch选择结构的优化
    CSS盒子模型
    html5--项目实战-仿天猫(移动端页面)
    关于运动
    自然拼读法长元音
    揭开自然拼读法(Phonics)的神秘面纱
    ExtJs自学教程(1):一切从API開始
    四个好看的CSS样式表格
    【Linux】linux经常使用基本命令
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/11953788.html
Copyright © 2011-2022 走看看