一、Python文件读取简介
文件(File)
通过Python来对计算机中的各种文件进行增删改查的操作;
I/O(Input/Output)
操作文件的步骤:
1、打开文件
2、对文件进行各种操作(读、写)
3、关闭文件
调用open()来打开一个文件,可以将文件分成两种类型:一种是纯文本文件(使用utf-8等编码写的文本文件);一种是二进制文件(图片、音频、PPT等文件)。open()这个函数打开文件时,默认是以文本文件的形式打开的。
文本文件之外的文件都是二进制文件。
#open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
#使用open打开一个文件
#参数:
#file:要打开文件的名字(或路径);
#返回值:返回的是一个对象,这个对象就是代表了当前打开的文件;
#如果目标文件和当前文件在同一级目录下,则直接使用文件名即可打开。
file_obj=open('demo.txt')
#read()方法来读取文件的内容,它会将内容全部保存到一个字符串返回。
content=file_obj.read()
print(content)
#关闭文件
file_obj.close()
#with ... as 语句
with open('demo.txt') as file_obj:
#在with语句中可以直接使用file_obj来操作文件
#此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭。
print(file_obj.read())
#标准的读写代码的格式如下:
filename='demo1.txt'
try:
with open(filename) as file_obj:
# 在with语句中可以直接使用file_obj来操作文件
# 此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭。
print(file_obj.read())
except FileNotFoundError:
print(f'{filename} 文件不存在...')
二、文件的读取
1、较大文件的读取
filename='demo1.txt'
try:
with open(filename,encoding='utf-8') as file_obj:
# 通过read()函数来读取文件的内容,它会将文本内容全部读取,
#如果要读取的内容文件比较大的情况,会一次性将文件内容加载到内存中,容易导致内存溢出。
#read()函数可以接收一个size作为参数,该参数用来指定读取的字符的数量,默认值是-1,它会读取文件中所有的字符。
#可以为size指定一个值,这样read()函数会读取指定数量的字符,
#每一次读取都是从上次读取到的位置开始读取,如果字符的数量小于size,则会读取剩余所有的字符
# content=file_obj.read(7)
# print(content)
# print(len(content))
# 调用open()来打开一个文件,可以将文件分成两种类型:
#一种是纯文本文件(使用utf-8等编码写的文本文件);
#一种是二进制文件(图片、音频、PPT等文件)。
#open()这个函数打开文件时,默认是以文本文件的形式打开的。
#处理文本文件时,有时候需要制定文件的编码
i=100
#创建一个循环来读取文件内容
while True:
content = file_obj.read(i)
#设置停止条件
if not content:
break
print(content,end='')
except FileNotFoundError:
print(f'{filename} 文件不存在...')
2、其他的读取方式
filename = 'demo.txt'
with open(filename,encoding='utf-8') as file_obj:
#readlines()该方法也是用于一行一行的读取内容,它会将读取到的内容封装到列表中返回。
print(file_obj.readlines())
#readline()该方法时逐行读取文件
file_obj.seek(0)#回到文件起始位置
print(file_obj.readline())
三、文件的写入
1、文本文件的写入
filename='demo.txt'
with open(filename,mode='w',encoding='utf-8') as file_obj:
#write()向文件中写入内容
#如果要操作的是一个文本文件的时候,write()函数需要我们传递一个字符串作为参数
#使用open()函数打开文件时需要制定打开文件所要的操作(读、写、追加)
#如果不指定操作类型,默认是以读取文件的方式打开,而读取文件是不能向文件中去写入的
#r,表示只读
#w,表示可以写,所以我们可以使用w来写入文件,如果文件不存在则会创建文件,如果文件存在,则会覆盖源文件中的内容。
#a,表示追加内容,如果文件不存在则会创建文件,如果文件存在则会向文件中追加内容。
#+,为操作符增加功能
#r+,即可读又可以写,文件不会报错
#x,用来创建文件,如果文件不存在则创建文件,如果文件存在就报错
file_obj.write('afag\n')
2、二进制文件的读写
#读取模式
#t,读取文本文件(默认)
#b,读取二进制文件,rb,读取二进制文件,wb,写入二进制文件
filename=r'C:\Users\fjcheng\Desktop\陈小春 - 独家记忆.mp3'
with open(filename,mode='rb') as file_obj:
#读取文本文件时,size是以字符为单位
#读取二进制文件时,size是以字节为单位
#将读取的内容写出来
#定义一个新的文件
new_name='abc.mp3'
# print(file_obj.read(100))
with open(new_name,'wb') as new_obj:
#定义每次读取的大小
c=1024*100
while True:
#从已有的对象中读取数据
content=file_obj.read(c)
#内容读取完毕,循环终止
if not content:
break
#将读取到的数据写入新的对象中
new_obj.write(content)
四、读取文件的位置
#读取文件的位置
with open('demo.txt','rb') as file_obj:
print(file_obj.read(5))
#tell()该方法用来检查当前读取的位置
#seek()可以修改当前读取的位置,也可以对中文进行操作,如果中文是utf-8时,seek(n),n必须为3的倍数,utf-8,一个中国字占3个字节
#参数:
#0,从头开始,默认
#1,从当前位置
#2,从最后位置计算
print('当前读取到了-->',file_obj.tell())
五、文件的其他操作
#文件的其他操作
import os
#listdir()获取当前目录结构
# r=os.listdir('.')
# os.chdir('c:/')#切换盘符
#os.getcwd()获取当前所在的目录
r=os.getcwd()
#创建目录
os.mkdir('abc')#在当前目录下创建目录
#删除目录
os.rmdir('abc')
print(r)
六、TXT/JSON/CSV/EXCEL文件处理
'''
一、TXT文件操作
1、打开文件
file=open(filename,mode)
filename :文件名
mode :模式(打开文件的模式),有以下几种:
r-->read,只读方式,文件不存在时,程序报错;默认的打开方式
w-->write,只写方式,文件不存在时,程序会创建一个文件,程序正常
a-->append,追加方式,文件不存在,程序会创建一个文件,程序正常
2、文件操作(读写)
2.1读操作
read-->读取全部文件
readline-->逐行读取
readlines-->返回列表,每一行就是列表中的一个元素
2.2写操作
write-->写,'w'会覆盖文件中已有的内容,'a'追加的方式写入
3、关闭文件
close
'''
file=open('demo.txt','w')
# print(file.readable())
# print(file.read())
# print(file.readline())
# print(file.readlines())
file.write('hello world')
file.write('\nPython')#这两个是按顺序同时写入的
file.close()
'''
with操作:上下文管理器
包括了异常处理,自动调用文件关闭操作,推荐使用
'''
with open('demo.txt','r') as f:
data=f.read()
print(data)
#练习:创建两个文件,一个文件中放入‘人生苦短,我用python’,
#一个文件读取刚才创建的文件内容,中文使用utf-8编码的
with open('demo1.txt','w',encoding='utf-8') as f:
f.write('人生苦短,我用python')
with open('demo1.txt','r',encoding='utf-8') as f:
data=f.read()
print(data)
'''
二、JSON文件操作
json是一种轻量级的数据交换格式。json源自JavaScript语言,
易于人类的阅读和编写,同时也易于机器解析和生成,
是目前应用最广泛的数据交换格式
json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,
对Python的类就无能为力。JSON格式和Python中的字典非常像。
但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。
JSON的文件操作
1、写操作
json.dump()-->写入文件中
json.dumps()-->写入字符串变量
2、读操作
json.load()-->从文件中读取
json.loads()-->从字符串变量中读取
'''
import json
s='json'
json.dump(s,open('json.txt','w'))
s=json.dumps(['hello world',{'name':'jingang'}])
print(s)#["hello world", {"name": "jingang"}],json的字符串
p=json.load(open('json.txt','r'))#参数为文件的对象
print(p)
'''
三、CSV文件操作
以纯文本形式存储的表格数据(以逗号作为分隔符),通常第一行为列名
可以使用Excel打开文件
'''
import csv
#newline:是新行,默认为None,None也要占一行,要想中间没有空行,需要将newline=''
with open('demo2.csv','w',newline="") as f:
# f.write('hello world')#一个字符串,不建议用这种方式写
#dialect默认打开方式是Excel
csvwriter=csv.writer(f,dialect='excel')
print(csvwriter)
csvwriter.writerow(['a','b','c'])
csvwriter.writerow(['a1', 'b1', 'c1'])
rf=open('demo2.csv')
reader=csv.reader(rf)
print(reader)
#生成器:next取值,或者用for循环
# print(next(reader))#逐行读取
# print(next(reader))
for i in reader:
print(i)
'''
四、Excel文件
Excel和CSV的区别:
1、都可以用Excel程序打开
2、Excel除了文本,数据也可以包含图表、样式等
3、CSV每条记录都存储为一行文本文件,每一条新行都表示一个新的数据记录
Excel文件操作
1、读取操作
import xlrd
book=xlrd.open_workbook('1.xls')
sheet=book.sheet_by_index(0)#获取第一个sheet
print(sheet.nrows)#获取行数
print(sheet.cell(1,1))#获取单元格的值,根据行列号
print(sheet.row(1))#获取第一行
print(sheet.row_values(1,1))#获取第一行,跳过第一列
2、写入操作
book=xlwt.Workbook()
wsheet=book.add_sheet('sheet1')
wsheet.write(0,0,label='name')#表的编行列号是从0开始的
book.save('demo2.xls')
'''