首页 > 编程语言 >Python学习笔记-文件操作与CSV格式

Python学习笔记-文件操作与CSV格式

时间:2024-05-28 15:29:51浏览次数:16  
标签:文件 csv Python 数据 笔记 打开 CSV open

文件打开和关闭

程序中的数据都存储在内存中,当程序执行完毕后,内存中的数据将丢失。文件可以用来进行数据的长期保存。

open函数

打开一个要做读/写操作的文件,打开文件后会返回一个文件对象,利用该文件对象可完成数据的读写操作。其常用形式为:

open(filename,mode='r')
# filename是要打开文件的路径;
# mode是文件打开方式,不同文件打开方式可以组合使用(默认为r=rt)

例:open函数使用示例。

f=open('D:\\Python\\test.txt','w+')

文件打开方式

r:以只读方式打开文件(默认),不允许写数据。
w:以写方式打开文件,不允许读数据。若文件已存在,则将清空文件内容;若文件不存在,则会创建新文件。
a:以追加写方式打开文件(文件指针指向文件末尾),不允许读数据。如文件不存在会创建新文件。
b:以二进制打开文件。
t:以文本方式打开文件(默认)。
+:以读写方式打开文件,可以读/写数据。

注:文件中有一个文件指针(光标位置),其指向当前要读/写数据的位置。

常用文件打开方式组合

r+或rt+:以文本方式打开文件并可对文件进行读写操作。文件不存在会报错。
w+或wt+:以文本方式打开文件并可以对文件进行读写操作,文件不存在会新建文件;文件已存在,会清空文件内容。
a+或at+:以文本、追加方式打开文件,可对文件进行读写操作。文件不存在会创建新文件;文件已存在则文件指针会自动移到文件尾。
rb+:与r+类似,只是已二进制方式打开文件
wb+:与w+类似,只是已二进制方式打开文件
ab+:与a+类似,只是已二进制方式打开文件

文件关闭close

使用open函数打开文件并完成读写操作后,必须使用文件对象的close方法将文件关闭。

f=open('test.txt','w+')
print('文件已关闭:',f.closed)  # False

f.close()
print('文件已关闭:',f.closed)	# True

文件已关闭: False
文件已关闭: True

with语句

让系统在文件操作完毕后自动关闭文件,从而避免忘记调用close方法而不能及时释放文件资源的问题。

with open('test.txt','w+') as f:
    pass
print('文件已关闭:',f.closed)

文件已关闭: True

文件对象方法(write和read)

write方法 可将字符串写到文件中

f.write(sr)
# f 是open函数返回的文件对象。
# str是要写入到文件中的字符串。

f.write函数执行完毕后将返回写入到文件中的字符数(包括换行符\n)

charnum=0
with open('test.txt','w+') as f:
    charnum+=f.write('Python是一门流行的编程语言!\n')
    
    charnum+=f.write('我喜欢学习Python语言!')
print('总共向文件写入的字符数:%d'%(charnum))

总共向文件写入的字符数:32

read方法 从文件中读取数

f.read(n=-1)
# f是open函数返回的文件对象。
n 指定了要读取的字节数(默认-1表示读取文件中的所有数据)。
# read 方法将从文件中读取的数据返回。

例:read方法使用示例。

with open('test.txt','r') as f:
    content1=f.read()
    content2=f.read()
print('content1:\n%s'%content1)
print('content2:\n %s'%content2)

content1:
Python是一门流行的编程语言!
我喜欢学习Python语言!
content2:
  • 第一次调用read方法时一次性地把文件中的所有数据读取到了conten1中,且此时文件指针自动移到刚读取数据的后面(即文件尾);
  • 第二次再调用read方法时不会读取到任何数据,因此content2是一个空字符串。

readline(每次一行)

将从文件中每次读取一行数据并以列表返回。

ls=[]
with open('test.txt','r') as f:
    ls.append(f.readline())
    ls.append(f.readline())
print(ls)

['Python是一门流行的编程语言!\n', '我喜欢学习Python语言!']

readlines(按行读取所有数据)

将从文件中按行读取的所有数据以列表形式返回。

with open('test.txt','r') as f:
    ls=f.readlines()
    #ls=list(f) 	# 使用list函数也可以得到readlines同样的结果
print(ls)

['Python是一门流行的编程语言!\n', '我喜欢学习Python语言!']

seek(文件指针/光标位置,无返回值)

f.seek(pos.whence=0)
# pos是要移动字节数
# whence是参照位置,默认0表示文件首,1和2分别表示以当前文件指针位置和文件尾作为参照位置.

通过seek方式实现的文件随机读写主要用于二进制文件,与seek对应的tell方法(获取当前文件指针的位置)。

例:seek使用示例。

with open('test.txt','r') as f:
    f.seek(6,0)		# 从文件首(0),向右移动6字节数
    print(f.readline())
    
是一门流行的编程语言!

注意:以文本方式打开文件后,仅支持以文件首作为参照位置;而以二进制方式打开文件后,可以支持全部的三种参照方式。

一维数据

指数据元素的值由一个因素唯一确定。
对于一维有序数据,可以使用列表存储;一维无序数据,可以使用集合存储。
在这里插入图片描述
例:对于5名学生的语文课成绩,可以使用如下形式的列表存储:
data1D=[90,70,95,98,65]

二维数据

指数据元素的值由两个因素共同确定,二维数据可以看作是由多个一维数据组成。
通过二维列表可以存储二维数据。
在这里插入图片描述
在这里插入图片描述
要使用二维列表存储5名学生在3门课上的成绩,需要写成如下形式:

data2D=[[90,98,87],	# 第1名学生的3门课成绩
[70,89,92]	# 第二名学生
[95,78,81]	# 第三名学生
[98,90,95]	# 第四名学生
[65,72,70]]	# 第五名学生

CSV操作一维、二维数据

(Comma-Separated Values)是一种国际通用的一维、二维数据格式,其对应文件的扩展名为.csv,可使用Excel软件直接打开。

CSV文件中每行对应一个一维数据,一维数据的各数据元素之间用英文半角逗号分隔(逗号两边不需要加额外的空格);对于缺失元素,也要保留逗号,使得元素的位置能够与实际数据对应。

CSV文件中的多行形成了一个二维数据,即一个二维数据由多个一维数据组成;
二维数据中的第一行可以是列标题,也可以直接存储数据(即没有列标题)。

CSV文件存储示例

对于一维数据,使用CSV文件存储的结果为:90,70,95,98,65

对于二维数据,使用CSV文件存储的结果为

90,98,87,
70,89,92
95,78,81
98,90,95
65,72,70

CSV文件的写操作(csv.writer)

CSV模块的writer方法可以生成一个writer对象,使用该对象可以将数据以逗号分隔的形式写入到CSV文件中,其语法格式为:

csv.writer(csvfile)
'''
csvfile是一个具有writer方法的对象。
如果Open函数返回的文件对象作为实参传给csvfile,则调用open函数打开文件时必须加上一个关键字参数"newline=''"
'''

生成writer对象后,就可以使用csv模块的writerrow和writerrows方法向csv文件中写入数据。

writer.writerow(row)	# row是要写入到CSV文件中的一行数据(如一维列表)
writer.writerrows(row)	# rows是要写入到csv文件中的多行数据(如二维列表)
# 

CSV文件的读操作(csv.reader)

可生成一个reader对象,使用该对象可以将以逗号分隔的数据从CSV文件读取出来,其语法格式为:

csv.reader(csvfile)
''' 
csvfile要求传入一个迭代器。
open函数返回的文件对象除了是可迭代对象,同时也是迭代器。
如果将文件对象作为实参传给csvfile,则调用open函数打开文件时应加上一个关键字参数"newline=''"
CSV文件中的每一行数据,每次遍历会返回一个由字符串组成的列表
'''

CSV文件读写示例

import csv
data2D=([[90,98,87],
[70,89,92],
[95,78,81],
[98,90,95],
[65,72,70]])

with open('score.csv','w',newline='') as f:
    csvwriter=csv.writer(f) # 得到writer对象
    csvwriter.writerow(['语文','数学','英语']) # 先将列标题写入CSV文件
    csvwriter.writerows(data2D) # 将二维列表中的数据写入CSV文件

ls2=[]
with open('score.csv','r',newline='') as f:
    csvreader=csv.reader(f)     # 得到read对象
    for line in csvreader:      # 将CSV文件中一行数据作为列表读取到line中
        ls2.append(line)
print(ls2)


[['语文', '数学', '英语'], ['90', '98', '87'], ['70', '89', '92'], ['95', '78', '81'], ['98', '90', '95'], ['65', '72', '70']]

标签:文件,csv,Python,数据,笔记,打开,CSV,open
From: https://blog.csdn.net/qijinbo0312/article/details/139259872

相关文章

  • 一款功能强大的Python工具,一键打包神器,一次编写、多平台运行!
    1、项目介绍Briefcase是一个功能强大的工具,主要用于将Python项目转化为多种平台的独立本地应用。它支持多种安装格式,使得Python项目能够轻松打包并部署到不同的操作系统和设备上,如macOS、Windows、Linux、iPhone/iPad、安卓系统以及电视操作系统等。项目地址:https://github.com......
  • python处理SQLite数据库
    1.前言数据库非常重要,程序的数据增删改查需要数据库支持。python处理数据库非常简单。而且不同类型的数据库处理逻辑方式大同小异。本文以sqlite数据库为例,介绍一下python操作数据库的方法。pythonsqlite3官方文档 注:Python操作mysqlite可以参照python&mysql基本使用2......
  • 【GPT应用】Python-GEE遥感大数据分析
    随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域、多尺度海量遥感数据处理需求。为解......
  • Python中Web开发-Flask框架
            大家好,在当今数字化的世界中,Web应用程序已经成为人们日常生活和商业活动中不可或缺的一部分。为了满足用户需求,开发人员需要选择适合他们项目需求的工具和技术。PythonFlask就是这样一款灵活而强大的工具,它能够帮助开发人员快速构建轻量级的Web应用程序......
  • Python安装
    Python官网下载地址:DownloadPython|Python.org如果之前没使用过Python的初学者,玩不明白Python相关的内容,不建议采取这种方式安装,推荐使用miniconda3。官网下载速度较慢,可以寻找镜像源下载。推荐使用华为云华为开源镜像站_软件开发服务_华为云(huaweicloud.com)华为云......
  • 基于python的打外星人游戏课程设计项目(免费提供全套源码)
    下载地址如下:基于python的打外星人游戏课程设计项目(免费提供全套源码)资源-CSDN文库项目介绍项目背景近年来,游戏开发作为计算机科学教育的重要组成部分,逐渐受到重视。通过游戏开发课程,不仅可以提高学生的编程技能,还能激发他们的创造力和逻辑思维能力。基于Python的打外星人......
  • 基于Python的量子遗传算法实现(免费提供全部源码)
    下载地址如下:基于Python的量子遗传算法实现(免费提供全部源码)资源-CSDN文库项目介绍项目背景随着量子计算和人工智能技术的迅猛发展,量子遗传算法(QuantumGeneticAlgorithm,QGA)作为一种结合量子计算和经典遗传算法的优化方法,受到了广泛关注。传统遗传算法在处理复杂优化问......
  • Python|【Pytorch】基于小波时频图与SwinTransformer的轴承故障诊断研究
    ......
  • Linux 学习笔记
    1.快速检测端口连通性/dev/tcp/<Hostname>(静态IP地址)/<port>(端口号)    特殊的文件,允许通过该接口进行TCP网络通信例 :测试192.168.1.1的22端口是否打开,/dev/tcp/192.168.1.1/22 没有输出结果代表端口是通的,如果有结果输出代表端口是不通的并未打开利用Bash脚......
  • 西门子学习笔记3 - 工业物联网(MQTT协议服务器的搭建)
    这里使用的是公开测试的一个服务器(EMQX)的服务器EMQX是一款全球下载量超千万的开源物联网MQTT服务器,单集群支持1亿物联网设备连接,消息分发时延低于1毫秒,助力企业构建关键业务的IoT平台与应用。1、服务器文件的下载1、官方下载地址:免费下载、试用EMQ产品(emqx.com......