【Python】 14-CVS文件操作

news2025/1/11 4:20:09

1.CVS文件

值没有类型,所有东西都是字符串;
• 没有字体大小或颜色的设置;
• 没有多个工作表;
• 不能指定单元格的宽度和高度;
• 不能合并单元格;
• 不能嵌入图像或图表。
CSV 文件中的每个单元格
有逗号分割,也许你可以只是对每行文本调用 split()方法,来取得这些值。但并非
CSV 文件中的每个逗号,都表示两个单元格之间的分界。 CSV 文件也有自己的转义
字符,允许逗号和其他字符作为值的一部分。 split()方法不能处理这些转义字符。因
为这些潜在的缺陷,所以总是应该使用 csv 模块来读写 CSV 文件。

2.创建 Reader 对象

import csv

exampleFile = open('example.csv')
exampleReader = csv.reader(exampleFile)
# 将 CSV 文件表示为列表的列表
exampleData = list(exampleReader)
print(
    exampleData)  # [['4/5/2014 13:34', 'Apples', '73'], ['4/5/2014 3:41', 'Cherries', '85'], ['4/6/2014 12:46', 'Pears', '14'], ['4/8/2014 8:59', 'Oranges', '52'], ['4/10/2014 2:07', 'Apples', '152'], ['4/10/2014 18:10', 'Bananas', '23'], ['4/10/2014 2:40', 'Strawberries', '98']]
for i in range(len(exampleData)):
    print(exampleData[i])

"""
['4/5/2014 13:34', 'Apples', '73']
['4/5/2014 3:41', 'Cherries', '85']
['4/6/2014 12:46', 'Pears', '14']
['4/8/2014 8:59', 'Oranges', '52']
['4/10/2014 2:07', 'Apples', '152']
['4/10/2014 18:10', 'Bananas', '23']
['4/10/2014 2:40', 'Strawberries', '98']
"""

在这里插入图片描述

3.通过下标访问

print(exampleData[0][1])  # Apples

对于大型的 CSV 文件,你需要在一个 for 循环中使用 Reader 对象。这样避免
将整个文件一次性装入内存
Reader 对象只能循环遍历一次。要再次读取 CSV 文件,必须调用 csv.reader, 创
建一个对象。

exampleFile = open('example.csv') # 再次读取
exampleReader = csv.reader(exampleFile)
for row in exampleReader:
    print("Row#" + str(exampleReader.line_num) + ' ' + str(row))

4.Writer 对象

Writer 对象让你将数据写入 CSV 文件。要创建一个 Writer 对象,就使用
csv.writer()函数。
首先,调用 open()并传入’w’,以写模式打开一个文件。这将创建对象。然后
将它传递给 csv.writer(),创建一个 Writer 对象。
在 Windows 上,需要为 open()函数的 newline 关键字参数传入一个空字符串。
如果忘记设置 newline 关键字参数, output.csv
中的行距将有两倍
Writer 对象的 writerow()方法接受一个列表参数。列表中的每个词,放在输出的
CSV 文件中的一个单元格中。
writerow()函数的返回值,是写入文件中这一行的字
符数(包括换行字符)。
生成的文件:
spam,eggs,bacon,ham
“Hello, world!”,eggs,bacon,ham
1,2,3.141592,4

import csv
outputFile = open('output.csv', 'w', newline='') # 需要为 open()函数的 newline 关键字参数传入一个空字符串。
outputWriter = csv.writer(outputFile)
outputWriter.writerow(['spam', 'eggs', 'bacon', 'ham'])
outputWriter.writerow(['Hello, world!', 'eggs', 'bacon', 'ham'])
outputWriter.writerow([1, 2, 3.141592, 4])
outputFile.close()

5.delimiter 和 lineterminator 关键字参数

默认情况下, CSV 文件的分隔符是逗号。行终止字符是出现在行末的字符。默
认情况下,行终止字符是换行符。你可以利用 csv.writer()的 delimiter 和 lineterminator
关键字参数,将这些字符改成不同的值。
传入 delimeter=‘\t’和 lineterminator=’\n\n’,这将单元格之间的字符改变为制表符,
将行之间的字符改变为两个换行符。然后我们调用 writerow()三次,得到 3 行
apples oranges grapes

eggs bacon ham

spam spam spam spam spam spam
既然单元格是由制表符分隔的,我们就使用文件扩展名.tsv,表示制表符分隔的值。

import csv
csvFile = open('example.tsv', 'w', newline='')
csvWriter = csv.writer(csvFile, delimiter='\t', lineterminator='\n\n')
csvWriter.writerow(['apples', 'oranges', 'grapes'])
csvWriter.writerow(['eggs', 'bacon', 'ham'])
csvWriter.writerow(['spam', 'spam', 'spam', 'spam', 'spam', 'spam'])
csvFile.close()

6.项目:从 CSV 文件中删除表头

假设你有一个枯燥的任务,要删除几百CSV 文件的第一行。也许你会将它们送入一
个自动化的过程,只需要数据,不需要每列顶部的表头。可以在Excel 中打开每个文件,
删除第一行,并重新保存该文件,但这需要几个小时。让我们写一个程序来做这件事。
该程序需要打开当前工作目录中所有扩展名为.csv 的文件,读取 CSV 文件的内
容,并除掉第一行的内容重新写入同名的文件。这将用新的、无表头的内容替换
CSV 文件的旧内容。
找出当前工作目录中的所有 CSV 文件。
• 读取每个文件的全部内容。
• 跳过第一行,将内容写入一个新的 CSV 文件。
在代码层面上,这意味着该程序需要做到以下几点:
• 循环遍历从 os.listdir()得到的文件列表,跳过非 CSV 文件。
• 创建一个 CSV Reader 对象,读取该文件的内容,利用 line_num 属性确定要跳
过哪一行。
• 创建一个 CSV Writer 对象,将读入的数据写入新文件。
针对这个项目,打开一个新的文件编辑器窗口,并保存为 removeCsvHeader.py。

#! python3
# removeCsvHeader.py - Removes the header from all CSV files in the current
# working directory.
import csv, os
os.makedirs('headerRemoved', exist_ok=True)
# Loop through every file in the current working directory.
for cvsFileName in os.listdir('.'): # 当前路径
    print(cvsFileName)
    if not cvsFileName.endswith('.csv'):
        continue
    print('Removing header from '+cvsFileName)
    #ToDo :Read the csv file in (skipping first now)
    cvsRows=[] # 列表保存每一行
    cvsFileObj=open(cvsFileName)
    readObj=csv.reader(cvsFileObj)
    for row in readObj:
        print("当前行号",readObj.line_num)
        # Reader 对象的 line_num 属性可以用来确定当前读入的是 CSV 文件的哪一行
        if readObj.line_num==1:
            continue # skip first row
        cvsRows.append(row) #该行将添加到 csvRows 中
    cvsFileObj.close()
    #TODO write out the csv file  第 3 步:写入 CSV 文件,没有第一行

    cvsFileObj=open(os.path.join('headerRemoved',cvsFileName),'w',newline='')
    # CSV Writer 对象利用 csvFilename(这也是我们在 CSV Reader 中使用的文件名),
    cvsWriter=csv.writer(cvsFileObj)
    print("writer.....")
    for row in cvsRows:
        cvsWriter.writerow(row)
    cvsFileObj.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaSE基础:数据类型和变量】

数据类型一、数据类型1.八大基本数据类型二、变量0.字面常量1.变量1)数值类型a.整型b.浮点型2)字符类型(char)3)布尔类型(boolean)2.类型转换3.类型提升一、数据类型 Java是一种强类型编程语言…

[思维模式-6]:《如何系统思考》-2- 认识篇 - 为什么要系统思考?系统思考是系统架构师、系统设计师的基本技能

目录 前言:系统思考的关键字 第1章 系统思考的作用 1.1 系统思考能够化繁为简 1.2 系统思考是敏捷成长和解决问题的系统方法 第2章 常见缺乏系统思考的表现 2.1 分解思维盛行的不足 2.2 面积上:只见树木,不见深林 2.3 时间上&#xf…

Tippecanoe安装使用

Tippecanoe安装使用 介绍 tippecanoe是mapbox官方提供的一个开源矢量切片工具,用C语言编写的。 Tippecanoe 的目标是为您的数据制作一个与比例无关的视图,以便在从整个世界到单个建筑物的任何级别上,您都可以看到数据的密度和纹理&#xf…

02---前端框架搭建

1、创建项目 1.该有的nodejs 、vue都要安装上,我用的是vuecli3,所以可以使用可视化界面 来创建项目(更加直观),当然你也可以采用命令行的方式创建项目。 2.cmd命令行输入: vue ui 3.在打开的可视化页面中…

基于asp.net193酒店客房预订网站系统-计算机毕业设计

项目介绍 本酒店系统使用asp.net技术制作,在前台为普通用户提供预定和查询等系统使用功能,在后台为酒店管理员提供对系统平台的管理功能。在前台为用户提供的操作功能包括以下内容:站内新闻、用户注册、酒店查看,留言板等功能。此系统为管理…

AMAIZINGIC晶焱科技:Wi-Fi 6E 路由器产品的ESD/EOS防护方案

AMAIZINGIC晶焱科技:Wi-Fi 6E 路由器产品的ESD/EOS防护方案 随着无线网路的发展,IEEE协会于2020年提出了最新的Wi-Fi 6E,此版本为Wi-Fi 6的延伸版本,除了Wi-Fi 6原先支援的2.4GHz及5GHz的频段外,新增了6GHz的频段&…

功能超级强大,Python 命令行解析工具 argparse很好用

在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse。这里面功能最强大的莫过于 argparse,下面就来看看它用法。 import argparse # 使用 a…

Java+SSM在线商城系统电商购物系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架:Spring、SpringMVC、MyBatis UI界面:BootStrap、jQuery 、JSP 数据库:MySQL 系统分为前台订票和后台管理: 1.前台商城 商品分类展示、商品详情、商品推荐、购物车、下单、支付 客…

课题设计基于nodejs购票系统的设计与实现.zip(论文+源码+ppt文档+视频录制)

第 1 章 绪 论 3 1.1研究现状及存在问题 3 1.2主要工作 4 第 2 章 系统开发技术概述 5 2.1 B/S 架构模式与C/S 架构模式 5 2.2 nodejs框架模式 6 第 3 章 需求分析 7 3.1 系统情况概述 7 3.2 系统功能性需求分析 9 3.3 系统非功能性需求分析 9 3.4 系统用例图 10 第 4 章 系统设…

【JavaSE】文件读写

目录 一、文件 1、文件的概念 1.广义 2.狭义 二、路径 1、绝对路径 2、相对路径 1.进入下一级./ 2.回退上一级../ 三、Java里的文件基本操作----File类 1、说明 2、File类的基本操作 1.基本方法 ​2.创建与删除文件 3.创建目录 4.文件的重命名 四、文件的读写操…

信息安全技术

安全分析模型自动化调优 MLOps(Machine Learning Operations)是一种人工智能 的工程实践,是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化,支持ML 模型的发布、激活、监控、性能跟踪…

【Spring Cloud】Nacos命名空间Namespace的介绍与使用

本期目录1. Namespace介绍2. 创建Namespace3. 配置Namespace专栏精选文章1. Namespace介绍 Namespace 通常用来做环境隔离。例如开发环境 dev 、测试环境 test 和生产环境 pro 之间的服务/数据相互隔离,无法相互访问。 Nacos 中服务和数据存储的最外层都是 Namespa…

常用性能测试工具的比较

目录性能测试的重要性针对接口的性能测试性能测试基准接口性能测试的主要指标abenchjMeterKelude性能脚本各种监控工具参考总结性能测试的重要性 众所周知性能测试在软件测试中占有举足轻重的作用,尤其是对于互联网产品这种具有大用户量,大数据量&#…

Spring Boot学习篇(一)

Spring Boot学习篇(一) 1 Spring、SpringBoot、SpringCloud有什么区别? spring一般指Spring框架(SpringFramework),它是一个开源、轻量级的Java应用开发框架。其核心是控制反转IOC和面向切面编程AOP。Spring提供了很多包括ORM、…

Kaggle 新赛 | GoDaddy 微型企业密度预测

文章目录一、比赛背景和目标1. 背景2. 比赛目标二、提交、时间线和奖项三、代码要求一、比赛背景和目标 1. 背景 美国政策领导人努力发展更具包容性和抗衰退能力的经济体。他们也意识到,随着科技的进步,创业从来没有像今天这样容易。无论是创造一个更合…

【阙值分割】粒子群算法自适应多阈值图像分割【含Matlab源码 1459期】

⛄一、粒子群算法自适应多阈值图像分割简介 理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】 粒子群优化的多阈值图像自分割算法 ⛄二、部分源代码 clc;clear;close all; %% 输入图像; Imag imread(‘24063.jpg’);%29…

【算法】常见的排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序)

目录一.常见排序类型二.排序详解1.冒泡排序2.选择排序3.插入排序4.希尔排序5.快速排序6.归并排序一.常见排序类型 插入排序:插入排序、希尔排序选择排序:简单选择排序、堆排序交换排序:冒泡排序、快速排序归并排序基数排序(又叫桶排序)八万个…

Java项目:新闻推荐管理系统(java+SSM+JavaScript+Ajax+Mysql)

源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目新闻推荐管理系统; 前台: 登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论 后台: (1)文件管理:文件列表。 &#x…

3.无重复字符的最长子串

原题:https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 目录 题目描述 题解 代码实现 题目描述 给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入:s "…

微型计算机技术及应用笔记

微型计算机概述 主机系统包括: CPU存储器输入输出接口总线CPU包括: 运算器(ALU)控制器(CU)寄存器组(Register)寄存器:通用寄存器、专用寄存器 控制器由指令寄存器、指令…