文件打开和关闭
程序中的数据都存储在内存中,当程序执行完毕后,内存中的数据将丢失。文件可以用来进行数据的长期保存。
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