说真的,刚开始接触数据这块儿,看到一堆后缀是 .csv 的文件躺在那里,心就有点慌。特别是在 Windows 上,用 Excel 打开吧,数据量稍微大点就卡得动不了,更别提那恼人的乱码问题了。那时候就在想,就没有更“技术”一点、更稳妥一点的办法吗?当然有啊!对于我们用 Python 搞事情的人来说,处理 csv 文件简直是基本功,而且方法还不止一种,各有各的好处。今天就掰开了、揉碎了,跟你聊聊 Python怎么打开csv 这码事儿。

首先得明白, csv 文件本质上就是个纯文本文件,数据 之间通常是用逗号隔开(Comma Separated Values嘛),但也可以是别的符号,比如制表符、分号啥的。每一行就是一条记录,每条记录里面的字段用分隔符隔开。理解了这个,就知道为啥有时候直接用记事本打开也能看,就是结构有点乱。

好,言归正传,用 Python 打开 csv 文件,最常见也最基础的,就是用它自带的那个 csv模块。这个模块是 Python 的“内建”功能,不用额外安装什么,非常方便。

方法一:用 Python 内置的 csv 模块

这个模块提供了一些工具,让你能更规范地读取和写入 csv 文件,而不用自己去费劲地拆分每一行的字符串。

最简单的读取方式是使用 csv.reader。想象一下,它就像一个“读取器”,逐行扫描你的 csv 文件,然后把每一行按分隔符切好,变成一个列表(list)。

来,看看代码怎么写:

“`python
import csv

file_path = ‘your_data.csv’ # 替换成你的csv文件路径

try:
# 关键点:指定文件路径,读取模式 ‘r’,还有编码 encoding=’utf-8’
# 如果你的文件不是 utf-8 编码,这里要换成对应的,比如 ‘gbk’
# newline=” 这个也很重要,能防止读取时出现额外的空行
with open(file_path, mode=’r’, encoding=’utf-8′, newline=”) as csvfile:
# 创建一个 reader 对象
reader = csv.reader(csvfile)

    # 如果你的csv文件第一行是表头,通常会先跳过它
    # next(reader) # 跳过第一行表头

    print(f"开始读取文件:{file_path}")
    # 遍历 reader,每一行就是一个列表
    for row in reader:
        # row 现在是一个列表,包含了这一行的所有数据
        print(row)
        # 你可以按索引访问每个字段,比如 row[0], row[1] 等等
        # print(f"第一列数据: {row[0]}, 第二列数据: {row[1]}")

except FileNotFoundError:
print(f”错误:文件 ‘{file_path}’ 未找到。”)
except Exception as e:
print(f”读取文件时发生错误:{e}”)

print(“文件读取完毕。”)
“`

看到了吗?with open(...) as csvfile: 这是一种特别优雅的处理文件的方式,它能确保文件在用完后自动关闭,即便中间程序报错了也一样,避免资源泄露。模式 'r' 表示我们是来读取文件数据的。encoding='utf-8' 这个太重要了!国内很多 csv 文件可能是 gbkgb2312 编码,但现在越来越多的是 utf-8 了,utf-8 是国际通用标准,强烈推荐。如果不知道编码,有时候得试一下。newline='' 呢,是为了避免在某些操作系统上读取 csv 文件时出现奇怪的空行,这是 csv模块 官方推荐的做法。

csv.reader(csvfile) 就是创建了那个“读取器”。然后 for row in reader: 循环,每次给你一行 数据,这行 数据 已经被切好,乖乖地装在一个列表里等着你处理了。你可以用列表的索引 row[0], row[1] 这样去访问每一列的数据。

但是呢,用索引访问有个问题,你得记住第一列是什么、第二列是什么……字段多了就容易晕。有没有更“智能”一点的办法呢?有! csv模块 还有一个好用的工具叫 csv.DictReader

csv.DictReader 更适合那种带表头的 csv 文件。它会把第一行当做表头,然后后续每一行的数据不再是列表,而是字典(dictionary)!字典的键就是表头里的字段名,值就是对应列的数据。这样你就可以用列名去访问数据了,比如 row['姓名']row['年龄'],是不是一下子清晰了很多?

来看 DictReader 的例子:

“`python
import csv

file_path = ‘your_data_with_header.csv’ # 替换成你的csv文件路径,这个文件要有表头哦

try:
with open(file_path, mode=’r’, encoding=’utf-8′, newline=”) as csvfile:
# 创建一个 DictReader 对象
# 它会自动使用第一行作为字典的键(fieldnames)
reader = csv.DictReader(csvfile)

    print(f"开始使用 DictReader 读取文件:{file_path}")
    # DictReader 也是可迭代的,每次循环得到一个字典
    for row in reader:
        # row 现在是一个字典
        print(row)
        # 你可以用列名访问数据,前提是文件有表头且 DictReader 正确读取了
        # 比如,如果你的表头里有 '姓名' 和 '城市'
        # print(f"姓名: {row['姓名']}, 城市: {row['城市']}")
        # 访问不存在的键会报错,可以先判断是否存在或者用 row.get()

except FileNotFoundError:
print(f”错误:文件 ‘{file_path}’ 未找到。”)
except KeyError as e:
print(f”读取文件时发生错误:找不到指定的列名 {e},请检查文件表头。”)
except Exception as e:
print(f”读取文件时发生错误:{e}”)

print(“文件读取完毕。”)
“`

看到没?csv.DictReader(csvfile) 就搞定了。后续遍历 reader 拿到的 row 直接就是字典了。用起来感觉舒服多了,代码也更“语义化”了。

csv模块 还有个参数 delimiter,可以指定分隔符。比如你的文件是用分号 ; 分隔的,那就 csv.reader(csvfile, delimiter=';')csv.DictReader(csvfile, delimiter=';')。这个小细节在处理非标准 csv 文件时非常有用。

总的来说, csv模块Python 内置的,够用,适合那些简单、数据量不大的 csv 文件处理任务。它的优点是轻量级,不用额外安装。缺点嘛,就是处理起来有点“手工”,特别是后续如果需要对 数据 做筛选、排序、计算之类的操作,用 csv模块 读出来的列表或字典,你得自己写一大堆循环和判断逻辑,会比较麻烦。

方法二:祭出神器——使用 pandas 库

好家伙,如果你是搞数据分析、数据科学的,或者需要处理的 csv 文件稍微大一点、复杂一点,那么 pandas 库绝对是你的不二之选。毫不夸张地说, pandas 就是为了处理表格型 数据 而生的, csv 文件正是它最拿手的对象之一。

Python怎么打开csv 文件用 pandas ?简单到令人发指!安装?第一次用的话,打开你的命令行(Terminal 或 CMD),敲下这句魔法咒语:pip install pandas openpyxlopenpyxl 是为了以后读写Excel文件,顺手装上不亏)。

安装好了,导入 pandas,然后一行代码就能把 csv 文件的内容变成一个 DataFrame(DataFrame 可以理解成一个带行列索引的二维表格,就像数据库的表或者 Excel 工作表)。

“`python
import pandas as pd

file_path = ‘your_large_data.csv’ # 替换成你的csv文件路径

try:
# 核心中的核心:pd.read_csv()
# 它会自动判断很多东西,比如分隔符、有没有表头、数据类型等等
# encoding 参数同样重要,但 pd.read_csv 会尝试多种编码,不过最好还是明确指定
# usecols 参数可以指定只读取哪些列,省内存
# dtype 参数可以指定某些列的数据类型,避免误判
df = pd.read_csv(file_path, encoding=’utf-8′) # 默认分隔符是逗号

print(f"使用 pandas 读取文件:{file_path}")
print("\nDataFrame 的前5行:")
print(df.head()) # 看看读进来的数据长啥样,默认显示前5行

print("\nDataFrame 的信息概览:")
df.info() # 查看列名、非空值数量、数据类型等信息

print("\nDataFrame 的描述性统计(数值列):")
print(df.describe()) # 查看数值列的统计信息,如均值、中位数、标准差等

# 现在 df 就是你的数据了,你可以非常方便地进行后续操作
# 比如:
# print("\n只看某一列的数据:")
# print(df['某列名']) # 替换 '某列名' 为实际列名

# print("\n筛选数据,比如年龄大于30的:")
# print(df[df['年龄'] > 30]) # 替换 '年龄' 和 30 为实际条件

except FileNotFoundError:
print(f”错误:文件 ‘{file_path}’ 未找到。”)
except Exception as e:
print(f”使用 pandas 读取文件时发生错误:{e}”)

print(“pandas 文件读取及初步查看完毕。”)
“`

看到了吧,一行 pd.read_csv(),几乎搞定了所有 csv模块 需要你手动处理的事情:文件打开、关闭、按分隔符切分、处理表头(它默认第一行就是表头),甚至还能自动识别 数据 的类型(数字、文本、日期等)。而且它返回的是 DataFrame 对象,这东西简直太强大了!有了 DataFrame,你想对 数据 做任何操作,几乎都有对应的内置方法,语法非常简洁高效。什么筛选(比如 df[df['age'] > 18])、排序(df.sort_values('salary'))、分组聚合(df.groupby('city')['sales'].sum())……跟用 csv模块 读出来的列表然后自己写循环比,那效率和代码量简直是天壤之别。

pd.read_csv() 方法本身也有巨多参数,可以让你精细控制读取过程。比如 delimiter 参数用来指定分隔符(跟 csv模块 一样),header 参数可以指定哪一行是表头(或者有没有表头),names 参数可以给没有表头的文件指定列名,skiprows 跳过前面几行,nrows 只读取前面几行,na_values 指定哪些值应该被认为是缺失值(NaN),dtype 强制指定某些列的 数据 类型……参数多得记不住没关系,用到的时候查文档就行,核心就是它帮你把大部分繁琐的事儿都做了。

对于很大的 csv 文件, pandas 还能分块读取(chunking),用 chunksize 参数,这样就不会一次性把所有 数据 都加载到内存,避免内存爆炸。这点对于处理TB级别 数据 的时候特别有用。

总结一下,Python怎么打开csv,你有两种主要选择:

  1. csv模块: 内置的,轻量级,适合简单任务或不依赖第三方库的场景。读取结果是列表的列表或字典的列表。
  2. pandas库: 需要安装,功能强大,高效,特别是处理大型 数据 和需要后续复杂分析时。读取结果是 DataFrame 对象。

选哪个?看你的需求和场景。如果只是简单看看文件内容、做个简单遍历处理, csv模块 足够了。但只要你的任务跟数据分析、数据清洗、或者数据量稍微大点沾边,毫不犹豫选 pandaspd.read_csv 吧!它能大幅提升你的效率,写出来的代码也更清晰易懂。

别再盯着那些 csv 文件发愁了,掌握了 Python怎么打开csv 的这两板斧,你就能轻松把这些原始 数据 抓到手里,变成可以分析、可以利用的信息财富了!去试试吧,你会爱上这种用代码驾驭数据的感觉!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。