Python学习打call第二十三天:文件操作

说到文件操作,我们就想到了读写操作,在python中对于文件操作就是读和写,访问文件的模式有两种,文本模式和二级制模式。

1.文件打开

# 现创建一个hello.txt文件,然后加入内容hello world
f = open(file='./hello.txt')
result = f.read()
print(result )  #输出: hello world
f.close()
  • 打开文件会用到open()函数,语法为:open(name[,mode[,buffering]]);

  • open函数()的文件名是必须的,而模式和缓冲参数都是可选的;

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
  • buffering:是指缓冲大小,-1表示默认大小4096,0表示关闭缓冲区, encoding表示编码方式,None表示默认的编码方式;
  • errors:表示编码错误被捕获,如果是errors=ignore,那么出现编码错误将会被忽略;
  • newline:表示文件换行的意思;
  • closefd:表示是否关闭文件时同时关闭文件描述符;

2.mode模式参数常用值有哪些

  • 'r':只读;

  • 'w':只写,从开头开始写,所以会覆盖文件的内容;

  • 'a':追加,不会覆盖文件内容;

  • 'x':只写,如果文件不存在则创建文件,以只写方式打开文件,保护写;

  • 'b':二进制;

  • 't':文本,是默认的模式,可以不写,一般都是以文本模式打开文件;

  • '+':读写;

  • 'r+':给只读赋予写的能力;

  • 'w+':给只写赋予只读的能力,因为是以只写的形式打开文件,会清空文件内容,所以不能读取到内容,只是有了读的功能;

3.文件读取

f = open(file='./hello.txt',mode='w')
result = f.read()
print(result) # hello world

f.write('a')  # 如果写入则会报错,因为此时是只读模式
#
result1 = f.read(3)  # 表示文件读三个字节,不给值表示直接读到EOF
print(result1) # hel

f.close() # 读取完文件一定要关闭
  • 读取文件会用到read()函数,用于从文件中读取指定的字符数,如果未给定或为负值则表示读取所有字符;

  • 如果文件非常大,尤其是大于内存时,无法使用read()方法;

4.文件写入

  • wxa都是只写,t模式是字符流,按照字符编码理解,b是字节流,字节操作是bytes类型;
  • + 无法单独使用,用来增强rwxa等功能,但是在获取文件对象是依然是本身的特性;
 # w为只写模式
f = open(file='./hello.txt', mode='w')
f.write('a')
f.read() # 此时读就会报错
f.close()

# x是只写,文件不存在,创建文件,以只写方式打开
f = open('./test.txt', 'x')
# f.read() # 此时读会报错
f.write('a')
f.close()

# a只写,文件存在,追加内容,文件不存在,只写,追加内容
f = open('./test1.txt', 'a')
# f.read() # 此时读会报错
f.write('aaa')
f.close()

5.文件指针

f = open('hello.txt', 'r+')
print(f.tell()) # 文件的起始位置 0
print(f.read()) # 读文件所有的内容
print(f.tell()) # EOF,也就是最后一个字符是几
print(f.seek(3)) # 偏移两个字节
print(f.read())
f.close()

f = open('test.txt', 'rb+')
print(f.tell()) # 文件的起始位置0
print(f.read()) # 读文件所有的内容
print(f.tell()) # EOF,也就是最后一个字符
print(f.seek(2)) # 偏移两个字节
print(f.read())

f.write(b'ni hao')
f.seek(2,2) # 二级制模式下,seek(offset, whence=0) 可以给whence传递1, 2 或 0, 0表示文件从头开始, 1表示从当前位置开始,2表示从文件末尾EOF开始
f.seek(1,1)
f.write(b'ni hao')
f.flush() # 将缓存刷新到文件
f.write(b'ni hao')
f.close() # 文件句柄关闭的时候,会将缓存刷新到文件

  • mode为r的时候,指针的起始点在0;

  • mode为a的时候,指针的起始点在EOF,文件末尾;

  • tell()函数:显示指针的当前位置;

  • seek()函数:移动文件指针的位置,参数offset指的是偏移的字节;

  • flush()函数:将缓存刷新到文件;

  • close()函数:关闭文件;

6.文件行读取

import io
f = open('hello.txt', 'r+')
print(io.DEFAULT_BUFFER_SIZE) # 8192
print(f.readline(), '第一行')  # 读取一行
print(f.readline(), '第二行')
print(f.readlines())          # 读取所有行,且返回列表
  • readline() 函数用于从文件读取整行(包括 "\n" 字符),如果指定了一个非负数的参数,则返回指定大小的字节数(包括 "\n" 字符);

  • readlines() 函数用于读取所有行,且返回值为列表形式;

7.open 文件上下文管理器

with open('test.txt',mode='w') as f:
    f.write('nihao')
  • 使用with 关键字来实现上下文管理器;

  • 通过上下文管理的方式打开文件,在文件末尾会自动执行关闭语句,不需要写f.close()来关闭文件了;

参考:侠课岛(9xkd.com)Python同学计划

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

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,746评论 0 10
  • [转]C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以...
    天之道天知道阅读 5,199评论 0 7
  • 我家养有一只小乌龟,它很可爱,很活泼。 小乌龟有一双乌黑的眼睛。头的两旁都有一条红色的条纹,有时候它的...
    汤智茵阅读 249评论 0 0
  • 今天,只不过煮个饭的时间,看着火苗,不知怎么的就开始想些有的没的,等回过神来,锅已经被烧穿了,手忙脚乱收拾完后,屋...
    苍泽阅读 359评论 0 1
  • 1 五年,在我25岁的时候,上帝赐给我圣灵告诉我30岁要发生的事情,上帝告诉我,30岁我有精神病人公司。有一个属于...
    潘蓝一阅读 725评论 1 1