python⽂件(读写)
⽂件(File)
1. r 表⽰只读
2. w 表⽰可以写 所以我们可以使⽤w来写⼊⽂件,如果⽂件不存在会创建⽂件,如果⽂件存在则会覆
3. 盖原⽂件的内容
3. a 表⽰追加内容 如果⽂件不存在会创建⽂件,如果⽂件存在则会像⽂件中追加内容
4.
1. 为操作符增加功能
5. r+ 既可读⼜可写,⽂件不会报错
6. x ⽤来创建⽂件,如果⽂件不存在就创建,如果存在就报错
打开⽂件
通过python对计算机中的各种⽂件进⾏增删改查的操作
I/O(Input/Output)
操作步骤
1. 打开⽂件
2. 对⽂件进⾏操作(读、写)python怎么读的
3. 关闭
open()⽅法
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
调⽤open()来打开⼀个⽂件,可以分为两种类型
⼀种是纯⽂本⽂件(使⽤utf-8、gkb等编写的⽂本⽂件)
⼀种是⽤⼆进制编写的⽂件(图⽚、⾳频、ppt等)
open()这个函数默认使⽤⽂本⽂件的⽅式打开,如果定义encoding打开中⽂⽂档会报错
处理⽂件时,需要制定⽂件的编码
参数:
file 要打开⽂件的名字(路径)
open有⼀个返回值,返回的是⼀个对象,这个对象就代表了当前打开的⽂件
如果⽬标⽂件和当前⽂件在同⼀级⽬录下,则直接使⽤⽂件名即可打开
读取⽂件
如果⽬标⽂件和当前⽂件在同⼀级⽬录下,则直接使⽤⽂件名即可打开
read()
read ⽅法⽤来读取⽂件的内容,它会将内容全部保存到⼀个字符串中返回
file_op =open(r'F:\my_')
content = ad()# read⽅法读取,并将内容全部保存
print(content)
我新创建了⼀个text⽂件,⾥⾯的内容是python官⽅⽂档的内容,我没有放到同级⽬录下,所以⽤的是绝对路径
关闭⽂件
close()
close⽅法⽤来关闭⽂件
记得要关闭⽂件,否则会⼀直占⽤内存
file_op =open(r'F:\my_')
content = ad()
print(content)
file_op.close()
你有可能忘记关闭⽂件
推荐你使⽤ with…as 语句
with open(file_name)as file_bgj:
print(ad())
# Open file and return a corresponding file object. If the file cannot be opened, an OSError is raised.
# file is a path-like object giving the pathname (absolute or relative to the current working directory)
#
# of the file to be opened or an integer file descriptor of the file to be wrapped.
# (If a file descriptor is given, it is closed when the returned I/O object is closed, unless closefd is
# set to False.)
此时这个⽂件只能在with中使⽤,⼀旦with结束⽂件,⽂件则会⾃动关闭close()
如果⽤上⾯的代码我打开⼀个存储中⽂的⽂件
file_name ='中⽂.txt'
with open(file_name)as file_obj:
print(ad())
# Traceback (most recent call last):
#  File "f:/my_dream/text.py", line 3, in <module>
#    print(ad())
# UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 8: illegal multibyte sequence
修改⼀下,定义编码形式
file_name ='中⽂.txt'
with open(file_name, encoding='utf-8')as file_obj:
print(ad())
# “我是⼩妖怪,逍遥⼜⾃在,杀⼈不眨眼,吃⼈不放盐,⼀⼝七⼋个,肚⽪要撑破,茅房去拉屎,想起忘带纸。# ⽣活你全是泪,没死就得活受罪,越是折腾越倒霉,越有追求越悲催,垂死挣扎你累不累,不如瘫在床上睡。# 来来回回千百遍,⼩爷也是很疲倦”
拓展:
cp936是GKB的⼀种
当我们读⼀个中⽂⽂档时
较⼤的⽂件
如果读取的⽂件⽐较⼤(按T算的),会⼀次将全部内容加载到内存中,容易导致内存泄漏read()函数可以接受⼀个size作为参数,该参数⽤来指定读取的字符的数量
size默认值是-1,它会读取⽂件中所有的字符
先看看size参数
# read(size=-1, /) method of _io.TextIOWrapper instance
#    Read at most n characters from stream.
#    Read from underlying buffer until we have n characters or we hit EOF.
#    If n is negative or omitted, read until EOF.
翻译⼀下就是
从流中做多读取n个字符
从底层缓冲区读取,知道我们指定的n个字符或达到EOF(我猜是“最后”)
如果n为负或省略,⼀直读取到最后
file_name ='中⽂.txt'
with open(file_name, encoding='utf-8')as file_obj:
# help(ad)
c = ad
print(c(6))
print(c(12))
print(len(c()))
# “我是⼩妖怪
# ,逍遥⼜⾃在,杀⼈不眨眼
# 97
注意,”(符号)也是占1个字符的,如果反复调⽤,并不会重复读取,⽽是继续向下读取12个字符串(我设置的12)当len放在read后⾯的时候,读取的是剩余字符穿的长度,原⽂长115,返回的是97,因为我已读18个字符
假设这个⽂件很⼤,我们想⼀次读完,直接使⽤read是不⾏的,但⼀部分⼀部分的读,就要⼀⾏⼀⾏的复制,很难受不如写个循环
file_name ='中⽂.txt'# 对⽬标⽂件命名,同级⽬录下
with open(file_name, encoding='utf-8')as file_obj:# ⽤as...打开,命名为file_obj
c = a
d # 讲读到的对象复制给c
while True:# while循环
a = c(12)# c是函数read对象,不是调⽤函数,所以这⾥要加括号,读到第12个字符,并赋值给a
if len(a)==0:# 设置终⽌语句,因为读了12个,这12个字符就没有了,len检测的是剩下字符的长度
break# 满⾜条件即停⽌读取,否则成了死循环
print(a)# 打印读到的数据
# “我是⼩妖怪,逍遥⼜⾃在
# ,杀⼈不眨眼,吃⼈不放盐
# ,⼀⼝七⼋个,肚⽪要撑破
# ,茅房去拉屎,想起忘带纸
# 。
# ⽣活你全是泪,没死就
# 得活受罪,越是折腾越倒霉
# ,越有追求越悲催,垂死挣
# 扎你累不累,不如瘫在床上
# 睡。
# 来来回回千百遍,⼩
# 爷也是很疲倦”
其他的读取⽅式
readline()
可以⽤来读取⼀⾏内容
print(c)
# “我是⼩妖怪,逍遥⼜⾃在,杀⼈不眨眼,吃⼈不放盐,⼀⼝七⼋个,肚⽪要撑破,茅房去拉屎,想起忘带纸。
readlines()
⼀⾏⼀⾏的读取,知道读完,它会将读取的内容封装到列表中,并且每⼀⾏后会有⼀个\n
file_name ='中⽂.txt'
with open(file_name, encoding='utf-8')as file_obj:
c = adlines()
print(c)
# ['“我是⼩妖怪,逍遥⼜⾃在,杀⼈不眨眼,吃⼈不放盐,⼀⼝七⼋个,肚⽪要撑破,茅房去拉屎,想起忘带纸。\n', '⽣活你全是泪,没死就得活受罪,越是折腾越倒霉,越有追求越悲催,垂死挣扎你累不累,不如瘫在床上睡。\n',
# '来来回回千百遍,⼩爷也是很疲倦”']
⽂件的写⼊
write()
使⽤open()函数打开⽂件时,需要指定打开⽂件所要的操作,读、写、追加,读是默认的,但不能写⼊
要对⽂件进⾏写⼊的时候,write()函数需要我们传递⼀个字符串作为参数
w 表⽰可以写,如果⽂件不存在则会创建⽂件,如果存在则会覆盖原⽂件
with open(r'C:\Users\vcc\','w', encoding='utf-8')as file_write:
r = file_write.write('如果有来⽣要做⼀棵树')
print(r)# 返回的是字符串的长度
# 10
⼆进制⽂件
b 读取⼆进制⽂件
读取⼆进制⽂件时,read()的size参数是以字节为单位
读取⽂本⽂件时,size以字符为单位(⼀个汉字=3个字符)
读取⼀个⾳乐⽂件
with open(r'C:\Users\vcc\Desktop\Kalimba.mp3','rb')as file_music:
r = ad()
print(r)# 我只截取部分,⽐较多
#xa5\x1dlr1\xa64\xc9\x1d\r$X\'\x16\x12\x8a\x90B\xa2\
是以⼆进制形式读取,⼗六进制显⽰的
将读到的⽂件再写⼊新的⽂件
with open(r'C:\Users\vcc\Desktop\Kalimba.mp3','rb')as file_music:
r = ad(100)
with open(r'C:\Users\vcc\Desktop\new_music.mp3','wb')as file_new:
c =1024*10# 1024是1KB,每次写⼊10KB
while True:
c = ad()
# 设置终⽌条件当剩余内容长度为0时,终⽌循环
if len(c)==0:
break
file_new.write(c)
读取⽂件的位置
tell()
tell()⽅法⽤来检查当前读取的位置
with open(r'C:\Users\vcc\','rb')as file_r:
file_r.seek(10)
ad()
print(ll())
# 224
seek()
可以修改当前读取的位置
参数:0 从头开始(默认)
1 从当前位置开始
从最后位置计算
with open(r'C:\Users\vcc\','rb')as file_r:
file_r.seek(0)
r = ad(10)
print(r)
print(ll())
# b"I'm a litt"
# 10
⽂件的其他操作
import os
os.listdir()获取当前⽬录的结构,listdir(’…’)获取上⼀级⽬录os.chdir(‘c:/’) 切换盘符
os.mkdir(‘casul’)创建⽬录,在当前⽬录创建
import os
r = os.getcwd()
print(r)
# E:\python\code\learn\python基础

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。