首页 > 编程语言 >Python处理CSV文件

Python处理CSV文件

时间:2023-09-24 14:13:09浏览次数:42  
标签:刘慈欣 文件 csv Python 三体 print CSV data

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

标签:刘慈欣,文件,csv,Python,三体,print,CSV,data
From: https://www.cnblogs.com/pam-sh/p/17725919.html

相关文章

  • Python列表
    插入 insert(索引值,插入的对象)追加append(“追加的对象”)删除pop(索引值)删除remove(“对象”)合并extend(“合并的对象”)搜索index(“搜索对象”)返回从左到右搜索到的第一个对象的索引搜索count(“搜索对象”)返回搜索对象的个数搜索in返回搜索的结果   搜索到返回Tr......
  • 大文件切片上传+断点续传解决方案-前后端实现
    上传文件大家应该都做过,前端直接把file文件传给后端就ok了,但是大文件这样传就会造成页面假死,体验极差。如果遇到网络不稳定的时候,中途上传失败的话,又要从头开始传,本来文件就大,还慢。所以今天我们用一种新方法-切片上传+断点续传前端实现:页面上很简单,我就放了进度条和一个上传文件......
  • python猜骰子
    以下是一个用Python编写的猜随机骰子数值的示例代码:importrandomdefguess_dice():#生成一个1到6的随机数作为骰子的数值dice_value=random.randint(1,6)#提示用户猜测骰子的数值guess=int(input("猜测骰子的数值(1-6):"))#检查猜测结......
  • 解除锁定:一键批量完成 【解除锁定】所有指定文件
    ......
  • python DAY3
    if之后想直接跳开不执行的话用:pass就可以。python中变量都是可以全局使用的: 与或非andornot   elseif在python中是elif   两数比较简写方法  想输出一个符号有时候需要敲两个上去: ......
  • mysql导入外部文件
    1、右击表点击导入向导2、选择导入类型,点击下一步 3、选择数据源 4、有需要的画更改栏位分隔符(这里是.csv文件所以不可选)5、修改数据行(我习惯改成第一行,这样不用担心遗漏数据)6、确定表名7、确定列名8、点击下一步、开始 等进度条满就可以啦 ......
  • 在python开发过程中常见的异常错误
    下面这些也是常见的异常错误,在报错的时候不要害怕,记住这些常见的单词。AttributeError尝试访问未知的对象属性EOFError用户输入文件末尾标志EOF(Ctrl+d)FloatingPointError浮点计算错误GeneratorExitgenerator.close()方法被调用的时候ImportError导入模块失败......
  • 为什么要学习python技术??
    大家好,随着大数据时代的到来,相信大家对新时代的认知达到了一个新的高度,我们可以仔细观察我们的生活,似乎每一年都会发生较大的变化。我记得我刚上大学的时候,移动支付才刚开始普及,短短几年,出门只需要一部手机便能行走天下,其中计算机编程起到了重要作用。 我们为什么要学......
  • 这个红头文件做了15遍!!!
    今天是2020-02-1720:57,真的很佩服自己的耐心!一朋友说自己需要调整一张图片的几个字,于是花了许久才昨晚,或许是能力有限吧,后面仔细一看,做了15遍,仔细想想,还有一层原因就是,我那朋友的要求的确比较高。今天小编给大家分享一下,ps学习过程中的一些心得吧!当涉及到学习使用PS(Photoshop)这......
  • springBoot上传文件时MultipartFile报空问题解决方法
    1.问题描述:之前用springMVC,转成springboot之后发现上传不能用。网上参考说是springboot已经有CommonsMultipartResolver了,但是我的上传后台接收的还是null。2.解决方法加入配置类importorg.springframework.context.annotation.Bean;importorg.springframework.context......