Python处理CSV文件

python,处理,csv,文件 · 浏览次数 : 17

小编点评

**Python 处理 CSV 文件** ```python import csv import pandas as pd # 读取 CSV 文件 with open('books.csv', 'r', encoding='utf-8') as file_obj: reader_obj = csv.reader(file_obj) # 打印读取到的数据 for row in reader_obj: print(row) # 创建 DataFrame 从 CSV 文件中读取数据 data = pd.read_csv('books.csv') # 打印 DataFrame 的首行 print(data.head()) # 使用 Pandas 读取 CSV 文件并自定义字段名 col_names = ['Id', 'Survived'] data = pd.read_csv('books.csv', names=col_names, header=None) # 打印 DataFrame 的首行 print(data.head()) # 写出 DataFrame 到 CSV 文件 with open('output.csv', 'w', newline='', encoding='utf-8') as file_obj: writer_obj = csv.writer(file_obj) writer_obj.writerow(['title', 'author']) writer_obj.writerow(['三体', '刘慈欣']) # 等价于以下代码 # writer_obj.writerows([ # ['Product Name','Price','Quantity','SKU Number'], # ['Rice',80,35,'RI59'] # ]) # 读取 CSV 文件并进行数据操作 data = pd.read_csv('books.csv') list = data.values print(list) # 使用 pandas 的 usecols 参数读取指定列 data = pd.read_csv('books.csv', sep=',', usecols=[1]) # 将 numpy数组写入 CSV 文件 np.savetxt('sample.csv', a, delimiter="\,", skiprows=1) a.tofile('sample1.csv', sep=',') ``` **示例** `books.csv` 文件中的内容如下: ``` title,author 三体,刘慈欣 呐喊,鲁迅 ``` 运行代码后,将生成以下输出: ``` [['title', 'author']] [['三体', '刘慈欣']] [['呐喊', '鲁迅']] ``` **注意** * `pandas` 库需要安装才能使用。 * `np.savetxt()` 函数可以写入数组到 CSV 文件。 * `str` 参数用于读取 CSV 文件时支持 str 类型。

正文

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文件的几种方法

与Python处理CSV文件相似的内容:

Python处理CSV文件

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

#Python 利用pandas 合并csv/xlsx文件

上次我们分享了利用powerquery来合并文件进行数据分析,但是Pq有一部分局限性,在现实工作中,我们往往需要合并多个文件去处理数据, 如果面对20个甚至更多的文件,pq中的每一步的步骤都会去读取每个文件,运行速度会十分慢,那么有没有简单的解决方法吗? 答案是:可以考虑合并成一个文件后来处理。 我

Python处理Oracle数据库的学习过程

Python处理Oracle数据库的学习过程 背景 产品数据存在一些大小写敏感的数据迁移到不敏感的数据库时出现报错的情况. 基于此, 我这边跟帅男同学学习了下Python的使用. 因为这一块一直比较菜.所以想着进行一下总计和备忘. 感谢帅男提供的支持与帮助. 环境安装 https://downloa

[转帖]python读取配置文件获取所有键值对_python总结——处理配置文件(ConfigParser)

python处理ConfigParser 使用ConfigParser模块读写ini文件 (转载) ConfigParserPython 的ConfigParser Module中定义了3个类对INI文件进行操作。分别是RawConfigParser、ConfigParser、 SafeConfig

Python 潮流周刊#52:Python 处理 Excel 的资源

本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。 本期周刊分享了 12 篇文章,12 个开源项目,赠书 5 本《网络是怎样连接的》,

Oracle AWR学习之二-利用ChatGPT编写一键获取AWR报告的脚本

# Oracle AWR学习之二-ChatGPT提升效率之n ## 背景 ``` 之前生成awr报告比较麻烦, 想着能够一键生成. 再辅以部分shell或者是python处理就可以进行细致的分析. 这一块其实还是比较简单的, 在ChatGPT加持下的确能够极大的提高自己的工作效率. 但是怀疑国内的学

< Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践

欢迎来到系列第八篇,异常处理的深入探讨。本文将分五部分展开。首先,我们将学习Python异常处理的基础知识,理解`try/except`语句的用法。然后,我们将了解Python的常见异常类型并通过实例理解它们的作用。第三部分,我们将更深入地解析`try-except`块,理解其工作原理及更加复杂的用法。在第四部分,我们会介绍如何自定义异常,并讨论其应用场景。最后,我们将介绍上下文管理器在异常处理中

[转帖]Python基础之文件处理(二)

https://www.jianshu.com/p/7dd08066f499 Python基础文件处理 python系列文档都是基于python3 一、字符编码 在python2默认编码是ASCII, python3里默认是utf-8; unicode分为 utf-32(占4个字节),utf-16(

实践探讨Python如何进行异常处理与日志记录

本文分享自华为云社区《Python异常处理与日志记录构建稳健可靠的应用》,作者:柠檬味拥抱。 异常处理和日志记录是编写可靠且易于维护的软件应用程序中至关重要的组成部分。Python提供了强大的异常处理机制和灵活的日志记录功能,使开发人员能够更轻松地管理代码中的错误和跟踪应用程序的执行过程。在本文中,

【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误

问题描述 使用VS Code创建Python Function,处理Event Hub中的数据。当部署到Azure Function App后,函数无法执行,查看 Function 日志出现 Value cannot be null. (Parameter 'receiverConnectionSt