首页 > 编程语言 >python 文件操作(csv和excel大型文件读取)

python 文件操作(csv和excel大型文件读取)

时间:2023-04-30 21:23:24浏览次数:53  
标签:文件 读取 python 写入 excel 使用 csv data row

使用csv模块

首先,我们需要导入csv模块:

import csv

读取CSV文件

要读取一个CSV文件,可以使用csv.reader()函数。该函数接受一个文件对象作为参数,并返回一个可迭代的行列表。每一行都是一个由列数据组成的列表。例如,如果我们有一个名为data.csv的CSV文件,其中包含以下内容:

Name,Age,Gender
John,30,M
Lisa,25,F
Mike,40,M

我们可以使用以下代码读取它:

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

输出结果为:

['Name', 'Age', 'Gender']
['John', '30', 'M']
['Lisa', '25', 'F']
['Mike', '40', 'M']

可以看到第一行是表头,后面的每一行都是数据行。

写入CSV文件

要写入CSV文件,可以使用csv.writer()函数。该函数接受一个文件对象和一个选项(如delimiter、quotechar等)作为参数,并返回一个writer对象。然后,可以使用writer对象的writerow()方法来写入一行数据。

例如,如果我们有以下数据:

data = [
    ['Name', 'Age', 'Gender'],
    ['John', 30, 'M'],
    ['Lisa', 25, 'F'],
    ['Mike', 40, 'M']
]

我们可以使用以下代码将数据写入CSV文件:

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

上面的newline=''是为了避免在Windows系统下出现多余的空行。

使用openpyxl模块

要使用openpyxl模块,我们首先需要安装它。可以使用以下命令:

pip install openpyxl

然后,我们需要导入openpyxl模块:

import openpyxl

读取Excel文件

要读取一个Excel文件,可以使用openpyxl.load_workbook()函数。该函数接受一个文件名作为参数,并返回一个Workbook对象。然后,可以使用Workbook对象的active属性来获取当前工作表(即第一个工作表),或者使用get_sheet_by_name()方法来获取指定名称的工作表。

例如,如果我们有一个名为data.xlsx的Excel文件,其中包含以下内容:

NameAgeGender
John 30 M
Lisa 25 F
Mike 40 M

我们可以使用以下代码读取它:

workbook = openpyxl.load_workbook('data.xlsx')
sheet = workbook.active

for row in sheet.iter_rows():
    for cell in row:
        print(cell.value, end='\t')
    print()

输出结果为:

Name    Age    Gender    
John    30    M    
Lisa    25    F    
Mike    40    M    

可以看到第一行是表头,后面的每一行都是数据行。

写入Excel文件

要写入Excel文件,可以使用openpyxl.Workbook()函数创建一个新的Workbook对象。然后,可以使用Workbook对象的active属性来获取当前工作表,并使用append()方法将数据添加到工作表中。

例如,如果我们有以下数据:

data = [
    ['Name', 'Age', 'Gender'],
    ['John', 30, 'M'],
    ['Lisa', 25, 'F'],
    ['Mike', 40, 'M']
]

我们可以使用以下代码将数据写入Excel文件:

workbook = openpyxl.Workbook()

接下来,我们可以使用Workbook对象的active属性来获取当前工作表,并使用append()方法将数据添加到工作表中。要保存Excel文件,可以使用Workbook对象的save()方法。

sheet = workbook.active

for row in data:
    sheet.append(row)

workbook.save('output.xlsx')

这将在当前目录下创建一个名为output.xlsx的新Excel文件,并将数据写入其中。

循环读取和写入数据

如果我们需要循环读取或写入大量数据,可以使用for循环和适当的条件语句来处理它们。例如,在读取CSV文件时,我们可以跳过第一行(即表头),然后将每一行的数据存储在一个列表中:

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    header = next(reader)  # 跳过第一行
    data = []
    for row in reader:
        data.append(row)

在写入CSV文件时,我们可以将数据从一个列表中读取出来,并将其写入CSV文件:

headers = ['Name', 'Age', 'Gender']
data = [
    ['John', 30, 'M'],
    ['Lisa', 25, 'F'],
    ['Mike', 40, 'M']
]

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(headers)
    for row in data:
        writer.writerow(row)

在读取Excel文件时,我们可以将数据从一个工作表中读取出来,并将其存储在一个列表中:

workbook = openpyxl.load_workbook('data.xlsx')
sheet = workbook.active

header = [cell.value for cell in sheet[1]]
data = []
for row in sheet.iter_rows(min_row=2):
    row_data = [cell.value for cell in row]
    data.append(row_data)

在写入Excel文件时,我们可以将数据从一个列表中读取出来,并将其写入工作表中:

headers = ['Name', 'Age', 'Gender']
data = [
    ['John', 30, 'M'],
    ['Lisa', 25, 'F'],
    ['Mike', 40, 'M']
]

workbook = openpyxl.Workbook()
sheet = workbook.active

sheet.append(headers)
for row in data:
    sheet.append(row)

workbook.save('output.xlsx')

需要注意的是,在处理大量数据时,可能会遇到内存不足的问题。为了解决这个问题,可以使用一些技巧,如分块读取或写入数据,或者使用专门设计的库,如pandas

分块读取和写入数据

如果我们处理的数据量非常大,可能无法将所有数据同时存储在内存中。在这种情况下,可以使用分块读取或写入数据的方法,即一次只处理一部分数据。

例如,在使用csv模块读取大型CSV文件时,可以使用以下代码:

with open('data.csv') as f:
    reader = csv.reader(f)
    header = next(reader)
    chunk_size = 1000
    while True:
        data_chunk = []
        for i in range(chunk_size):
            try:
                row = next(reader)
                data_chunk.append(row)
            except StopIteration:
                break
        if not data_chunk:
            break
        process_data(data_chunk)  # 处理数据

在这个例子中,我们使用了一个while循环来不断读取数据块,并使用process_data()函数来处理数据。chunk_size变量指定每个数据块的大小。

类似地,在使用openpyxl模块读取大型Excel文件时,也可以使用以下代码:

workbook = openpyxl.load_workbook('data.xlsx')
sheet = workbook.active

header = [cell.value for cell in sheet[1]]

chunk_size = 1000
max_row = sheet.max_row
for i in range(2, max_row+1, chunk_size):
    rows = sheet.iter_rows(min_row=i, max_row=min(i+chunk_size-1, max_row))
    data_chunk = [[cell.value for cell in row] for row in rows]
    process_data(data_chunk)  # 处理数据

在这个例子中,我们使用了一个for循环来不断读取数据块,并使用process_data()函数来处理数据。chunk_size变量指定每个数据块的大小。

类似地,在写入大型CSV或Excel文件时,也可以使用分块写入数据的方法,即一次只写入一部分数据。

使用pandas库

另一个处理大量数据的好工具是pandas库,它提供了一种高效的方式来处理和分析表格数据。如果您需要处理大量数据,请考虑使用pandas库。

例如,要读取CSV文件并将其转换为DataFrame对象,可以使用以下代码:

import pandas as pd

df = pd.read_csv('data.csv')

在这个例子中,我们导入了pandas库,并使用read_csv()函数将CSV文件读取为DataFrame对象。

然后,可以像处理常规Python列表一样处理DataFrame对象,例如使用head()方法查看前几行:

print(df.head())

这个例子中,我们使用to_csv()方法将DataFrame对象写入CSV文件,并设置index=False以避免写入行号。

pandas库也可以用于处理Excel文件。要读取Excel文件并将其转换为DataFrame对象,可以使用以下代码:

import pandas as pd

df = pd.read_excel('data.xlsx', engine='openpyxl')

在这个例子中,我们使用了engine='openpyxl'参数来指定使用openpyxl模块读取Excel文件(如果未指定该参数,则默认使用xlrd模块)。

然后,可以像处理常规Python列表一样处理DataFrame对象,例如使用head()方法查看前几行:

print(df.head())

要将DataFrame对象写入Excel文件,可以使用以下代码:

df.to_excel('output.xlsx', index=False)

在这个例子中,我们使用to_excel()方法将DataFrame对象写入Excel文件,并设置index=False以避免写入行号。

需要注意的是,在使用pandas库处理大量数据时,仍然可能会出现内存不足的问题。在这种情况下,可以使用类似分块读取和写入数据的方法,即一次只处理一部分数据。pandas库提供了许多有用的函数和方法,可以轻松地进行数据分组、聚合和过滤等操作,因此非常适合处理大型数据集。

下面给出一个使用pandas库处理大型CSV文件的例子。假设我们有一个大小为10GB的CSV文件,其中包含以下数据:

id,name,age,gender
1,Alice,25,F
2,Bob,30,M
3,Charlie,40,M
4,Dave,35,M
5,Eve,28,F
6,Frank,45,M
...

我们可以使用以下代码将CSV文件读取为DataFrame对象,并仅选择需要的列:

import pandas as pd

chunk_size = 1000000
reader = pd.read_csv('data.csv', usecols=['name', 'age', 'gender'], chunksize=chunk_size)

for i, chunk in enumerate(reader):
    # 处理数据块
    process_data(chunk)

在这个例子中,我们指定了要读取的列,并使用chunksize参数将CSV文件分成了大小为chunk_size的块。然后,我们使用pd.read_csv()函数返回一个可迭代的TextFileReader对象,并使用enumerate()函数获取每个数据块的索引和内容。

接下来,我们将每个数据块传递给process_data()函数进行处理。在该函数中,我们可以进一步对数据进行分组、聚合等操作,例如计算每个年龄段的平均年龄:

def process_data(data):
    # 计算每个年龄段的平均年龄
    age_mean = data.groupby(pd.cut(data['age'], bins=[0, 30, 40, float('inf')]))['age'].mean()
    print(age_mean)

在这个例子中,我们使用pd.cut()函数将年龄数据分成三个年龄段(0-30岁、31-40岁、41岁及以上),并使用groupby()方法按年龄段进行分组。然后,我们使用mean()方法计算每个年龄段的平均年龄,并输出结果。

使用pandas库处理大型数据集可以使代码更简洁、更易读,并且可以轻松地进行数据处理和可视化等操作。因此,如果您需要处理大量数据,请考虑使用pandas库。

标签:文件,读取,python,写入,excel,使用,csv,data,row
From: https://www.cnblogs.com/yund/p/17365787.html

相关文章

  • python 文件操作
    在Python3中,进行文件操作的主要方式是使用内置的open()函数。该函数接受一个文件名和一个模式参数,并返回一个文件对象,我们可以在该对象上执行读取或写入操作。以下是一些常见的文件操作及其示例:打开文件我们可以使用open()函数打开一个文件并获得文件对象。例如,以下代码......
  • Android下Excel的操作
    在Android下操作Excel和在j2se下操作是一样的,下载一个jxl.jar包,导入到android工程的构建路径中。加入权限<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>......
  • python 模块及引用
    在Python中,模块是一种组织代码的方式。它允许我们将相关的函数、类和变量放在一个文件中,并通过导入该文件来使用其中的代码。Python自带了很多常用的模块,同时我们也可以编写自己的模块。要调用一个模块,我们需要使用import语句。例如,如果我们想使用Python标准库中的math模块,可......
  • Python 斐波那契数列
    概念:斐波那契数列又称黄金分割数列,即:1,1,2,3,5,8,13,21,…,这个数列前两项都是1,从第3项开始,每一项都等于前两项之和。随着数列的增加,前一项与后一项的比值逼近0.6180339887这个黄金分割系数 code:deffiblist(input):fib=[1,1]#第一和第二项固定为值为1......
  • python 高级特性
    Python高级特性列表推导式(Listcomprehension)列表推导式允许您使用简洁的方式创建一个新的列表。它的语法如下:new_list=[expressionforiteminold_listifcondition]其中,expression是新列表中每个元素的计算公式,item是旧列表中的每个元素,condition是可选的条件......
  • python 类的继承
    Python中的类继承可以分为以下几种类型:单继承:一个子类只继承一个父类。多继承:一个子类同时继承多个父类。深度优先继承:在多继承中,如果有多个父类具有相同的方法或属性,则会按照从左到右、深度优先的顺序查找并使用第一个符合要求的父类的方法或属性。方法重写:一个子类......
  • python基础语法
    变量和数据类型#变量名可以由字母、数字、下划线组成,但不能以数字开头name='Lucy'age=18is_student=Truescore=95.5变量:用于存储数据或者引用对象的标识符。数据类型:Python中有多种数据类型,如字符串(str)、整数(int)、布尔值(bool)、浮点数(float)等。控制流语句......
  • python 数据类型
    Python3中有以下常用的数据类型:整型(int):表示整数,例如1、2、3等等。浮点型(float):表示浮点数或实数,例如3.14、0.1等等。字符串型(str):表示文本或字符序列,例如"Hello,world!"。布尔型(bool):表示真或假,只有两个取值True和False。列表型(list):表示可变有序序列,可以包含......
  • python 类与对象
    类和对象的基本概念类:类是一种模板或者蓝图,用于描述一类对象所具有的属性和方法。类定义了对象的基本结构,包括属性和方法。对象:对象是类的一个实例,是具体实现某个类的一个具体实体。每个对象都有自己的属性和方法。类和对象的应用在Python中,可以通过定义类来创建对象,并......
  • python3 环境搭建
    安装Python3:从官网https://www.python.org/downloads/下载符合您操作系统的Python3版本,并按照安装向导完成安装。配置环境变量:将Python3的安装路径添加到系统PATH环境变量中。在Windows系统中,可以右键点击“此电脑”,选择“属性”->“高级系统设置”->“环境变量”,在系......