IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【Python】 14-CVS文件操作 -> 正文阅读

[Python知识库]【Python】 14-CVS文件操作

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()
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:04:55  更:2022-12-25 11:10:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/22 18:36:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码