Python处理CSV文件

python处理CSV文件

CSV文件#

CSV (comma-separated values)文件是一种文本文件格式,允许以表格结构保存数据。这是一种流行的格式,用于从数据库和电子表格导出和导入数据,CSV 文件中的每条数据都用逗号 (,) 分隔,例如,第一行数据可以选择用作标题,标明其下方的每一列数据:

image-20230923214405903

处理CSV文件#

CSV模块#

Python 提供了CSV模块,用于以 CSV 格式读取、写入和执行其他形式的文件处理,内置库提供了可无缝处理 CSV 文件的函数和类。

#

  • CSV模块有csv.reader()函数可以读取CSV文件,调用open()函数生成的一个文件对象, csv.reader() 将返回一个读取器对象。读取器对象将迭代 CSV 数据的每一行,其中行作为字符串列表返回。
import csv

# encoding是打开(读取)文件的编码方式
with open('D:\\work\\test\\csv\\books.csv',encoding='utf-8') as file_obj:
    reader_obj = csv.reader(file_obj)	# 以列表形式读取
    print(reader_obj)   # 返回读取器对象
    for row in reader_obj:  # 以list形式返回一行
        print(row)

# 输出
<_csv.reader object at 0x00000234C16F6860>
['title', 'author']
['三体', '刘慈欣']
['呐喊', '鲁迅']
  • 以字典形式读取
import csv

with open('books.csv','r',encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)        # 以字典形式读取
    print(reader)

    for i in reader:
        print(i)

#

  • csv.writer() 函数使我们能够以CSV格式写入数据,以写入模式打开文件后,会返回一个编写器对象。
  • 编写器对象具有 writerow() 方法,用于写入单行数据(每次以逗号分隔的字符串或数值的可迭代值),而 writerows() 方法一次用于多行
import csv

with open('products.csv', 'w', newline='', encoding='utf-8') as file_obj:
    # 不加入“newline=''”时,会隔行写入
    writer_obj = csv.writer(file_obj)
    # 一行一行写入
    writer_obj.writerow(['Product Name','Price','Quantity','SKU Number'])
    writer_obj.writerow(['Rice',80,35,'RI59023'])
    writer_obj.writerow(['Curry',2,200,'CY13890'])
    writer_obj.writerow(['Milk',9.5,315,'MK10204'])

    # 使用多行写入
    writer_obj.writerows([['Product Name','Price','Quantity','SKU Number'],
                         ['Rice',80,35,'RI59023'],
                          ['Curry',2,200,'CY13890'],
                          ['Milk',9.5,315,'MK10204']])
  • 关于open()中的newline=''参数,在写入时,若newline是None, '\n', '\r', '\r\n',则隔行写入;若newline='',则“连续”写入。

更多参考:python_open函数中newline参数详解

panda库#

#

  • read_csv()方法返回一个包含CSV文件数据的Pandas DataFrame对象,其中输入也可以时URL。
  • head()方法默认显示CSV文件的前五行,也可以自定义。
  • header是字段,如果header=1,将会以第二行作为字段名,读取第二行以下的数据
import pandas as pd
data = pd.read_csv(r'books.csv')
print(type(data))
print(data)
# 默认输出前5行,也可以自定义
print(data.head())
print(data.head(3))

data = pd.read_csv(r'books.csv',header=1)
print(data.head(2))

# 输出
<class 'pandas.core.frame.DataFrame'>
  title author
0    三体    刘慈欣
1    呐喊     鲁迅
2    三体    刘慈欣
3    呐喊     鲁迅
4    三体    刘慈欣
5    呐喊     鲁迅
  title author
0    三体    刘慈欣
1    呐喊     鲁迅
2    三体    刘慈欣
3    呐喊     鲁迅
4    三体    刘慈欣
  title author
0    三体    刘慈欣
1    呐喊     鲁迅
2    三体    刘慈欣
   三体  刘慈欣
0  呐喊   鲁迅
1  三体  刘慈欣
  • 默认情况下,read_csv()方法将CSV文件第一行中的值视为列标题,也可以自定义标题,且将自定义列名称的列表传递给方法的names属性,如果要覆盖默认的标头名称,则可以传递header=None关键字参数。
import pandas as pd
data = pd.read_csv(r'books.csv')
print(data.head(2))

col_names = ['Id','Survived']
data= pd.read_csv(r'books.csv', names=col_names, header=None)
print(data.head(2))

# 输出
  title author
0    三体    刘慈欣
1    呐喊     鲁迅
      Id Survived
0  title   author
1     三体      刘慈欣
  • values属性可以将读出的DataFrame对象转换为List形式。
import pandas as pd
data = pd.read_csv(r'books.csv')
print(data)

list = data.values
print(list)

## 输出
  title author
0    三体    刘慈欣
1    呐喊     鲁迅
2    三体    刘慈欣
3    呐喊     鲁迅
4    三体    刘慈欣
5    呐喊     鲁迅
[['三体' '刘慈欣']
 ['呐喊' '鲁迅']
 ['三体' '刘慈欣']
 ['呐喊' '鲁迅']
 ['三体' '刘慈欣']
 ['呐喊' '鲁迅']]
  • usecols属性表示读取第几列。
import pandas as pd
data = pd.read_csv(r'books.csv',sep=',',usecols=[1])
print(data.head(2))

# 输出
 author
0    刘慈欣
1     鲁迅

#

  • 创建DataFrame对象,写入CSV
import pandas as pd

# 指定字段名
city = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
city.to_csv('city.csv') # 第一列为序号列

# 字典形式存储
city = pd.DataFrame([{'City':'Sacramento', 'State':'California'}, {'City':'Miami', 'State':'Florida'}])
city.to_csv('city2.csv') 

numpy库#

#

  • loadtxt方法默认情况下,读取的数据是float类型,使用str参数,让方法读取数据时,支持str类型。
    • 跳过首行 - skiprow = 1
    • 读取特定列 - usecols参数
import numpy as np
with open('books.csv',encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",")
    print(data)    
    
import numpy as np

with open('books.csv',encoding = 'utf-8') as f:
    data = np.loadtxt(f,str,delimiter = ",", skiprows = 1)
    print(data[:2])

# 输出
[['三体' '刘慈欣']
 ['呐喊' '鲁迅']]

#

  • tofile() 函数允许我们将数组写入文本或二进制文件,但会将所有内容存储在一行中
import numpy as np

a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])

np.savetxt('sample.csv', a, delimiter=",")

a.tofile('sample1.csv',sep=',')

参考#

  1. 使用 Python 处理 CSV 文件,附示例
  2. Python读取csv文件的几种方法

作者:Hang Shao

出处:https://www.cnblogs.com/pam-sh/p/17725919.html

版权:本作品采用「知识共享」许可协议进行许可。

声明:欢迎交流! 原文链接 ,如有问题,可邮件(mir_soh@163.com)咨询.

posted @   PamShao  阅读(3043)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-09-24 cpp
2020-09-24 求逆元
2020-09-24 电脑分屏
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu