python基础学习浅学文件

#####################第一部分:::文件的基本操作

读 r (read) ; 写 w (write) ; 执行 x ; 追加 a (append)

文件打开的模式:
模式: 描述:
r 以只读方式打开文件,文件指针默认放在文件开头,文件不存在则报错。
r+ 打开一个文件用于读写,文件指针默认放在文件开头,文件不存在则报错。
w 打开一个文件用于写入,如果该文件已存在则将其覆盖,如果不存在,创建新文件。
w+ 打开一个文件用于读写,如果该文件已存在则将其覆盖,如果不存在,创建新文件。
a 打开一个文件用于追加,如果文件已存在,文件指针会放在文件末尾(也就是说,新的内容将会被写到已有内容之后)如果不存在,创建新文件进行写入。
a+ 打开一个文件用于读写,如果文件已存在,文件指针会放在文件结尾,文件打开时会是追加模式,如果不存在,创建新文件用于读写。

其他模式 : rb rb+ wb wb+ ab ab+
加个b的作用:以二进制的格式打开文件(比如操作音频文件,图片文件,视频文件…),进行上述操作。

1.如何打开/关闭一个文件

打开文件:
f = open(flie_path,mode = “r”) #有两个参数,第一个参数是文件的位置(可以是绝对路径,也可以是相对路径),第二个参数是打开的方式,默认r
传入表示文件路径的字符串,会返回一个文件对象。

关闭文件:
f.close()
调用给定文件对象的close方法

注意:打开一个文件操作完之后,一定要关闭。

需要知道的小知识点:
(1)windows系统中:
相对路径:不带盘符的
绝对路径:带盘符的
(2)光标位置:
1.如果读完了就读不了了,因为光标的位置在最后
2.通过seek方法重新调整光标的位置
3.写完了后,光标位置在最后
例子看看:

f = open(r’C:\my\pycharm_work\ceshi.py’,‘r+’)
f.read()
‘wumou love zhangmou’

f.read() #现在就读不了了,因为光标在上一次读完之后移动到了最后。
‘’

f.seek(0) #把光标位置调整到最前面,那么光标后面就有内容了
0

f.read() #现在就可以读到内容了
‘wumou love zhangmou’

f.tell() #可以查看光标的位置
24

f.seek(0)
0

f.tell()
0

拓展:
1.读取指定大小的内容:
变量名.read() #括号里加要读的指定的字符串长度,不写则全读

2.读取文件某一行的内容:
变量名.readline()

3.读取文件多行:
变量名.readlines() #括号内可以指定要读的行数,不写则全读,全读的话会变成列表的形式。

4.写入内容:
f.write(变量名)

5.写入多行:(注意换行需要自己加代码)
变量名.writelines(变量名)

来个例子看看:

f = open(r’C:\my\pycharm_work\ceshi.py’,‘r+’)
f.read()
‘’

f.writelines(‘wumou \n zhangmou \n haha’)
f.seek(0)
0

f.read()
‘wumouzhangmouzhangmouwumou \n zhangmou \n haha’

f.seek(0)
0

f.readline() #这样是一下查看一行。
‘wumouzhangmouzhangmouwumou \n’

f.readline()
’ zhangmou \n’

f.seek(0)
0

f.readlines() #这样是一下查看全部行。
[‘wumouzhangmouzhangmouwumou \n’, ’ zhangmou \n’, ’ haha’]

6.立即刷新缓冲:
变量名.flush() #可以理解为保存

举个例子:
文件内容是: wumou

f1 = open(r’C:\my\pycharm_work\ceshi.py’,‘a’)
f1.write(‘shuai’)
5

f2 = open(r’C:\my\pycharm_work\ceshi.py’,‘r’)
f2.read() #会发现现在读是读不到刚刚以追加方式写进入的内容shuai
‘wumou’

f1.flush() #我们立即刷新缓冲,那么下面就可以读到了。此处作用相当于在进行文件操作之后进行保存
f2.seek(0)
0

f2.read()
‘wumoushuai’

7.获取游标位置:
变量名.tell()

8.调整游标的位置:
变量名.seek(position)

总结:
持久存储:保存内存中数据都是易丢失的,只有保存在硬盘中才能持久的存储,保存在硬盘中的基本方法就是把数据写入文件中
打开和关闭:在python中文件的打开与关闭变得十分简单快捷,文件在关闭的时候就会自动保存

#########################第二部分::StringIO与BytesIO

真文件:在关闭文件的时候文件内容不会丢失。
假文件:在关闭文件的时候文件内容会丢失。

(1)StringIO:

import io #创建IO操作:
sio = io.StringIO()

sio.write(‘好好学习,天天向上’) #写入

print(sio.getvalue()) #可以多次读取,没有光标的问题存在
print(sio.getvalue()) #也可以获取到
sio.close() #关闭
print(sio.getvalue()) #报错,获取不到。
# 当创建的StringIO调用 close() 方法时,
# 在内存中的数据会丢失

(2)BytesIO字节流:
BytesIO 和 StringIO 类似,但是BytesIO操作的是Bytes数据,decode解码

import io
bio = io.BytesIO()
bio.write(b’hsfdhdsf124’) #如果写入字母或者数字时,注意在引号前面加上b
print(bio.getvalue())

bio.write(‘吴某’.encode()) #如果写入汉字的话,要进行编码,默认为utf-8
print(bio.getvalue().decode()) #那么如果想获取的话就要进行解码,如果不解码就是二进制形式

注意:
调用close()方法,保存内存中的数据,保证内存中的数据不会丢失。
防止占用某一个资源。如果不关闭的话,那么这个IO资源就会被他一直占用,别人想用就没法用了。

######################第三部分::上下文管理 with…as
作用:让python自动执行关闭过程,即调用close()方法。
管理多个文件自动关闭。

首先来看,单个文件操作时:
with open(file_path, mode=‘r’) as f:
# 对f进行一系列操作
# 也可以执行别的操作

#跳出with语句快的时候自动执行f.close()

然后来看,多个文件操作时:
with open(file_path, mode=‘r’) as f1,
open(file_path, mode=‘r’) as f2,
.
.
.
open(file_path, mode=‘r’) as fn:
# 对f进行一系列操作
# 也可以执行别的操作

file.closed 查看文件是否关闭了

#跳出with语句块的时候自动执行f.close()

最后来看看:
两个底层方法:enter__和__exit

class Person:
def enter(self): # 进入的时候自动调用
print(‘this is enter’)
return ‘吴某好帅’

def __exit__(self,exc_type,exc_val,exc_tb):    #退出的时候自动调用
    print("this is exit")

#with可以打开类,进行多个方法的管理
a = Person()
with a as f: #with可以管理多个软件,打开多个软件。
print(111) #我们打开这个类,就会自动调用__enter__方法,然后进行打印111的操作
print(f) #f就是__enter__的返回值
#结束之后就会自动调用__exit__方法

输出为: this is enter
111
吴某好帅
this is exit

#####################第三部分::os模块
(1)文件访问编码:
文件内容:
adafsd
asdfasdfd
sadfdsfds
sdafdsf
吴某
你真帅
hello

例子:::
with open(‘shuju.py’,‘r+’,encoding =‘ASCII’,errors = ‘ignore’) as f:
# 如果非想用ASCII编码方法打开一个包含中文的文件
#(ASCII只能打开英文和数字,打开中文会报错因为解不了中文)
# 那么就加个errors = ‘ignore’ 这样就会忽略错误,直接跳过中文部分
print(f.read())

输出为:
adafsd
asdfasdfd
sadfdsfds
sdafdsf

hello

(2)os模块 的目录及文件操作:

#先要导入os模块
import os

######################第一部分:::os模块 的目录及文件操作
#1.显示当前路径:os.getcwd()
print(os.getcwd()) #输出为:C:\my\pycharm_work

#2.展示当前目录内容:os.listdir(path)
print(os.listdir(r’C:\my\pycharm_work’)) #输出为:[’.idea’,‘阴历和阳历转换.py’]

#3.改变当前路径: os.chdir(path)
print(os.getcwd()) # 输出为:C:\my\pycharm_work
os.chdir(r’C:\my’)
print(os.getcwd()) # 输出为:C:\my

#4.创建目录: os.mkdir(文件名)
os.mkdir(‘a.py’)
print(os.listdir(r’C:\my\pycharm_work’)) # 输出为:[’.idea’, ‘a.py’, ‘阴历和阳历转换.py’]

#5.删除目录: os.rmdir(文件名)
os.rmdir(‘a.py’)
print(os.listdir(r’C:\my\pycharm_work’)) #输出为:[’.idea’,‘阴历和阳历转换.py’]

#6.使用Linux命令: os.system()

#7.删除文件: os.remove(文件名)

#8.重命名: os.rename(“oldname”,“new”)

################第二部分:::os.path模块 的路径操作
#1.路径拼接: os.path.join(path1,path2….)
a = os.path.join(r’C:\my\python’,r’pycharm_work’) # 注意第二个以及更多的路径前不能加反斜杠
print(a) # 输出为:C:\my\python\pycharm_work

#2.所在目录 / 父级目录: os.path.dirname(路径)

#3.基本短路径: os.path.basename

#4.绝对路径: os.path.abspath(路径)

#5.相对路径: os.path.relpath(路径)

#6.资源大小: os.path.getsize(路径) 获取字节

#7.资源时间: os.path.getctime(路径) /创建
#getatime(路径) / 访问
#getmtime(路径) 修改

#8.路径是否存在: os.path.exists(路径)

#9.是否是目录: os.path.isdir()

#10.是否是文件: os.path.isfile()

#11.是否是绝对路径: os.path.isabs()

发布了14 篇原创文章 · 获赞 15 · 访问量 223

猜你喜欢

转载自blog.csdn.net/qq_44907926/article/details/104350527