2021-02-21python之文件打开关闭,读写

文件的打开与关闭

image.png

打开文件

(1)打开并读取出文件的全部内容

helloworld.txt文件内容如下:


image.png

file_op.py代码如下:

#打开文件保存到file变量中
#打开文件,不穿参数,默认module默认是r ,只读
file=open("E:\\pythonProject\\helloworld.txt")
#读取文件内容
print(file.read())
打印内容:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
helloworld

Process finished with exit code 0


(2)文件打开之后可以做哪些操做??

image.png

1)file.name:获取文件名

file_op.py文件代码如下:

file=open("E:\\pythonProject\\test.txt","r")
#获取打开文件的文件名
print(file.name)

#判断文件是否被挂关闭
print(file.closed)

##获取文件的打开的模式是什么
print(file.mode)

打印内容:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
E:\pythonProject\test.txt
False
r

Process finished with exit code 0
注意:

#open()传入的文件可以是绝对路径,也可以直接是一个文件名
#如果是一个文件名。就从当前操做的文件所在目录下打开这个文件,如果没有这个文件,执行会报错,提示没有这个文件
file=open("test.txt")
#获取包含文件名的字符串即open()传入的第一个参数name
print(file.name)
打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
test.txt



2)file.closed:判断文件是否被关闭,返回布尔值

file=open("test.txt")
#判断文件是否被挂关闭
print(file.closed)
#关闭文件
file.close()
打印结果如下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
False
True
Process finished with exit code 0


注意:文件打开操做结束一定要关闭文件,否则会一直占用内存

3)file.mode:获取文件的打开i模式

file=open("test.txt")
#获取文件的打开模式
print(file.mode)

打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
r

Process finished with exit code 0

文件读写

image.png

image.png

1.只读的模式:r

r是默认的模式。文件的指针将会放在文件的开头(意思是:文件打开后,光标默认定位在文件第一行第一个字符的前面,读取的时候会将光标之后的所有内容都读取出来)
test.txt文件内容如下:


image.png

1)read():不传入参数:默认读取全部

file=open("E:\\pythonProject\\test.txt","r")
print(file.read())
file.closed()
打印结果:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my name is  test

Process finished with exit code 0

2)read():传入参数,指定读取几个字符

#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my  n
file.close()
#再次打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取1个字符内容
print(file.read(1))#j结果:m
#读取1个字符内容之后,再读取4个字符内容
print(file.read(4))#结果:y na
file.close()


执行结果:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my n
m
y na

Process finished with exit code 0

3)文件定位

image.png

1. 参考位置为文件开头

   file_op.py文件代码如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my  n
#获取光标所在的位置
print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动到指定位置
file.seek(0,0)#光标移动到文件的开头
print(file.read())#结果:my name is test
#光标移动到的第四个字符,光标移动参考位置是文件开头
file.seek(4,0)
print(file.read())#结果:ame is test
file.close()


执行结果如下:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
my n
4
my name is test
ame is test

Process finished with exit code 0


2.参考位置为光标当前位置

file_op.py文件代码如下:
#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#读取四个字符内容
print(file.read(4))#结果:my  n
#获取光标所在的位置
print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动2个字符,光标移动参考位置为:光标当前所在位置
file.seek(2,1)
print(file.read())#前期结果:e is test
file.close()

执行结果:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
Traceback (most recent call last):
my n
4
  File "E:/pythonProject/file_op.py", line 8, in <module>
    file.seek(2,1)
io.UnsupportedOperation: can't do nonzero cur-relative seeks

Process finished with exit code 1

3.参考位置为文件末尾

file_op.py文件代码如下:

#打开文件
file=open("E:\\pythonProject\\test.txt","r")
#光标参考位置为,文件末尾
file.seek(1,2)
print(file.read())
file.close()

执行结果:与上面一样报错,也会提示:io.UnsupportedOperation错误。

报错解决办法:打开模式加b,二进制读取

test.txt内容如下:


image.png

file_op.pyd代码更新如下:

#打开文件
file=open("E:\\pythonProject\\test.txt","rb")
#读取四个字符内容
print(file.read(4))#结果:my  n
#获取光标所在的位置
print(file.tell())#结果:4   这里注意:输出的是字节数,英文,数字,空格都是1个字节。所以输出光标所在的位置是4,一个汉字是2个字节,如果全部是汉字,那么就是8
#光标移动2个字符,光标移动参考位置为:光标当前所在位置
file.seek(2,1)
print(file.read())#前期结果:e is test
file.close()


代码运行结果:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
b'my n'
4
b'e is  test'

Process finished with exit code 0

上面执行结果可以看到:代码不再报io.UnsupportedOperation错误。
想了解更多的seek()用法。可以参考seek()介绍章节

2.读写模式:r+

(1)先写后读

test.txt文件内容如下:

image.png

file_op.py文件代码如下:

file=open("E:\\pythonProject\\test.txt","r+")
file.write("new99")
print(file.read())

打印结果如下:
E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
me is test

Process finished with exit code 0

test.txt文件打开如下:


image.png

总结:先写后读,打开文件,未执行读操做,光标定位在文件的开头。新写入的内容会覆盖后面的内容。未关闭文件,就读取文件光标定位在写入内容结束的位置开始往后读取

(2)先读后写

test.txt文件内容如下:


image.png

file_op.py文件代码如下:

file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())
file.write("is new 123")
print(file.read())#结果:读取内容为空

执行结果为下:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
new99me is test

Process finished with exit code 0

打开test.txt文件,内容如下:

image.png

总结:先读后写。打开文件后,执行读操做,内容读取结束,未关闭文件,此时光标定位在文件内容结束位置。所以此时执行写操做,会从内容最后位置写入,上面代码读取内容之所以为空。因为文件未关闭,光标定位在写入结束的位置开始往后读,所以读取为空

如下面的代码:file_op.py

file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())
file.write("hello")
file.close()
#g关闭后重新打开i读取
file=open("E:\\pythonProject\\test.txt","r+")
print(file.read())

执行结果:

E:\pythonProject\venv\Scripts\python.exe E:/pythonProject/file_op.py
new99me is testis new 123
new99me is testis new 123hello

Process finished with exit code 0

3.只写模式:w

如果打开的文件存在且有内容,那么会清空原有数据。重新写入新数据

4.读写模式:w+

5.追加模式:a

6.追加模式:a+

数据流

一般对于文件和图片这种,我们会选择流的方式,或者也叫比特流

比如下图代码:打开image.jpg图片是以二进制打开(wb),b代表二进制,如果写w,不加b会报错。
因为url里面存的图片就是一个数据流,所以要以二进制的形式写入到image.jpg文件中

image.png
image.png

下图就是写入的图片:

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容