基本打开模式

  • 文件操作的流程:打开文件,操作文件,关闭文件
  • 打开文件方法:open(文件名,模式,编码)
  • file = open(‘文件名’) 模式在不给值的情况下,默认为只读,而且如果是非当前的目录下文件名要加绝对路径

  

  ‘r’--只读

  • file_name.read()   一次性把指针后的内容全部读出来

  

  • file_name.readlines()  把指针后内容,以列表的形式每行读出

f = open('ha.log','r')
data1 = f.readlines()
f.close()
print(data1)
#结果为:['that is good!\n', 'nice to meet you!\n', 'hello kitty!\n'] f = open('ha.log','r')
f.seek(5)
data2 = f.readlines()
f.close()
print(data2)
#结果为:['is good!\n', 'nice to meet you!\n', 'hello kitty!\n']
  • file_name.readline()  每一次读一行内容

  

  • 文件里循环读取,循环文件默认是循环行内容
f = open('ha.log','r')
for line in f:
print(line)
f.close()
#结果为:
that is good! nice to meet you! hello kitty!

 'r'模式总结:只读模式在打开文件时是从头开始读,其中read()和readlines()是一次把文件所有内容都读取出来,在文件很大时,不建议这两种方法,非常占内存

       而readline和循环文件是一行一行读,两次方法每次读取都是只占一行内容的内存,readline操作比较繁琐,并且你如果不知道最后一行在哪,一般容易报错,

       一般用for循环

  ‘w’--只写

  • 以只写模式打开时,先检测文件存不存在,不存在就创建,存在清空文件内容

  

  • file_name.writelines()  和只读里的readlins相对应,以列表形式写入
f = open('ha.log','w')
f.writelines(['that is good!\n', 'nice to meet you!\n', 'hello kitty!\n'])
f.close() f = open('ha.log','r')
data = f.read()
f.close()
print(data)
结果为:
that is good!
nice to meet you!
hello kitty!

  ‘w’模式总结:只写模式适用于创建不存在的文件,用于清空内容再写入内容情况比较少,如果说想在文件末尾添加内容,这就涉及到我们即将讲的‘a’模式

  ‘a’--追加模式

  • 打开文件时,指针跳到文件的末尾,此时执行写操作就是内容添加操作
  • 追加模式下不可读,不存在则创建,存在则追加
f = open('ha.log','a')
print(f.tell())
f.write('大家好')
f.close() f = open('ha.log','r')
data = f.read()
f.close()
print(data)
结果为:
48
that is good!
nice to meet you!
hello kitty!
大家好

  ‘x’--只写

  • 不存在创建,存在则报错(这个模式py3新增的)    --用于判断文件存不存在非常有用

  

字节打开模式

  • 别看我们平时操作都是能看懂的字符串,其实在程序底部都是一些计算机能识别的二进制文件,所以让我们看懂,必须经过一个编码转换区,由字节转换为字符

  

  'rb'--字节只读模式

  

  'wb'--字节只写模式

  

文件操作指针

  • file_name.seek()  指针拨到指定位置
  • file_name.tell()  告诉你当前指针的位置

  

  • r+ 读写--从0开始
  • w+ 写读--写把文件清空,从0开始
  • a+ 写读--指针从末尾开始
  • x+ 写读--存在报错,从0开始

  

  

with open('ha.log','w') as f:
f.writelines(['大家好才是真的好\n','明天的太阳依旧灿烂\n']) #打开以a+模式,如果先写,是从当前指针开始往后覆盖内容
with open('ha.log', 'r+') as f:
print(f.tell()) #0
f.write('早起的鸟儿有虫吃\n')
f.seek(0)
data3 = f.read()
print(data3)
# 结果为:
# 早起的鸟儿有虫吃
# 明天的太阳依旧灿烂

文件上下文管理

  • with open(’文件名‘,模式) as 文件变量:文件操作---------这种方式不用再写文件关闭了,因为这种方式在操作后会自动关闭文件
  • 在py3还支持同时打开两个文件:with open(文件1,模式) as obj1,open(文件2,模式) as obj2:文件操作

  大型文件复制:

with open('ha.log','r') as obj1,open('ha2.log','w') as obj2:
for line in obj1:
obj2.write(line) with open('ha2.log','r') as obj2:
data = obj2.read()
print(data)

文件操作常用方法拾遗

  • file_name.flush()  强行把内存刷到硬盘
  • file_name.truncate()  保留指针前的内容
with open('ha2.log','a+') as obj1:
obj1.seek(6)
obj1.truncate()
obj1.seek(0)
data = obj1.read()
print(data) #结果为:大家好

欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                             笔者:拍省先生  

python基础-第四篇-4.2文件操作的更多相关文章

  1. python基础——6(字符编码,文件操作)

    今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 *****     2.字符与字节: 字符占多少字节,字符串转化 ***     3.文件操作: 操作硬盘中的一块区域:读写操作  ...

  2. python 基础学习笔记(5)--文件操作

    **python 的文件操作** - [ ] 使用python来读写文件是非常简单的操作,我们使用open()来打开一个文件,获取到文件的语柄,然后通过文件语柄就可以进行各种各样的操作了. - [ ] ...

  3. python基础-第四篇-4.1内置函数

    lambda表达式 lambda表达式是对简单函数的精简化表达 语法结构:函数名 = lambda:运算表达式 def f1(a): a = a + 1 return a ret = f1(1) pr ...

  4. python、第四篇:记录相关操作

    一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...

  5. Python基础6--函数、类和文件操作

    1 def name(para) def myabs(x): if x>0: return x else: return -x 2 lambda表达式 用于声明匿名函数,既没有名字的小函数 f ...

  6. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  7. Python基础知识(四)

    Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意 ...

  8. Python基础学习四

    Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ...

  9. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

随机推荐

  1. python用time函数计算程序运行时间

    内置模块time包含很多与时间相关函数.我们可通过它获得当前的时间和格式化时间输出. time(),以浮点形式返回自Linux新世纪以来经过的秒数.在linux中,00:00:00 UTC, Janu ...

  2. jquery 取第一个兄弟节点

    1.HTML <table> <tr> <td>1</td> <td>abc</td> <td>def</td ...

  3. Ubuntu 文件文件夹查看权限和设置权限

    ubuntu下查看权限的命令为: ls -l filename ls -ld folder ubuntu下设置权限的命令为: 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- ...

  4. [ucos]了解ucos

    1. uCosIII移植到STM32F10x http://www.cnblogs.com/hiker-blogs/archive/2012/06/13/2547176.html 2. uCosIII ...

  5. MDI多文档窗体续

    private void 加载窗体_Click(object sender, EventArgs e) { Form2 frm = new Form2();//实例化 Form2 frm.MdiPar ...

  6. How to activate maven profile inside eclipse

    How to activate maven profile inside eclipse Normally maven is use for project dependency management ...

  7. 将php和mysql命令加入到环境变量中

    方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/my ...

  8. gitolite 服务器搭建

    网上大牛都说的是安装gitolite要建git用户,我看完全没必要,毕竟用户拿到私钥也未必能登录服务器吧...下面我们就用root用户来安装gitolite,并且配置版本库文件保存路径.. 1. gi ...

  9. 神经网络Batch Normalization——学习笔记

    训练神经网络的过程,就是在求未知参数(权重).让网络搭建起来,得到理想的结果. 分类-监督学习. 反向传播求权重:每一层在算偏导数.局部梯度,链式法则. 激活函数: sigmoid仅中间段趋势良好 对 ...

  10. DEDECMS自定义表单提交后的跳转链接修改方法

    dedecms自定义表单,点击提交后,默认跳转到首页,我们打开plus/diy.php,里面有这样一段代码: 代码如下:if($dsql->executenonequery($query)) { ...