一、打开文件

文件句柄 = open('文件路径', '模式')

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认】
  • w,只写模式【不可读;不存在则创建;存在则清空内容;】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】
#!usr/bin/env python
# -*- coding:utf-8 -*-
f = open('history.log','r') #以只读模式打开文件
data = f.read() #读取内容并赋值给data
f.close()
print(data)
#!usr/bin/env python
# -*- coding:utf-8 -*-
f = open('history1.log','w',encoding='utf-8') #以只写模式打开文件,因为找不到文件,此时会创建history1.log
data = f.write('你好') #读取内容并赋值给data
f.close()

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

可以用seek()和 tell()函数进行测试各个打开方式的不同,两个函数分别是:移动指针的位置、返回当前指针位置

1、r+的打开方式总结:

1)打开文件时,原文件中的内容不变

2)打开文件后,指针默认的位置处于0,此时写入数据从开始写入,覆盖后面的数据,如果是读取数据是从开始读取

3)可以读也可以写

4)只要读一次,不管读几个字符,写入的时候就会在尾部进行追加数据。所以读取数据后要想从开头或中间写入数据,需要用seek()改变指针位置。

f = open('history1.log','r+',encoding='utf-8') #history1中的内容为:hello,what is your name
print(f.tell()) #文件中的内容未变,返回0。说明:打开文件后当前指针为0的位置
data = f.read()
print(data) #返回:hello,what is your name说明默认从0的位置读到末尾,此时指针在最后
f.write("my name is sunshuhai") #文件中的内容变为:hello,what is your namemy name is sunshuhai
f.close

2、w+的打开方式总结

1)如果文件存在,则打开原文件,并把原文件内容清空;如果文件不存在,则建立该空文件

2)指针指向0

3)写入后可以进行读取,需要用seek()移动指针的位置才能读取

f = open('history1.log','w+',encoding='utf-8') #history1中的内容为:hello,what is your name
print(f.tell()) #打开时文件中的内容被清空,此时指针处于0位置 f1 = open('history2.log','w+',encoding='utf-8') #history2不存在该文件,运行代码后会自动创建history2.log文件

3、x+的打开方式总结

1)如果文件已经存在则报错,如果文件不存在则会创建新的文件

2)写入后可以进行读取,写入后指针处于最后,需要用seek()移动指针的位置才能读取

f = open('history1.log','x+',encoding='utf-8') #history1中的内容为:hello,what is your name
print(f.tell())
f.close() #报错,因为文件已经存在
f1 = open('history3.log','x+',encoding='utf-8') #history3不存在该文件,运行代码后会自动创建history3.log文件

4、a+的打开方式总结

1)如果文件已经存在则打开,如果不存在则创建

2)打开后原来的文件内容不变

3)默认的指针位置在最后

4)可以进行读和写

f = open('history1.log','a+',encoding='utf-8') #不存在则创建,存在则打开,此时history1.log中的内容为hello,what is your name
print(f.tell()) #返回23,说明:追加模式打开,指针会默认移到最后
data = f.read()
print(data) #返回空,因为指针在最后,所以读取不到数据
f.write('你好') #此时内容为:hello,what is your name你好
f.close()

 二、文件操作的主要功能函数

f = open('history1.log','r+',encoding='utf-8')
f.close() #关闭文件
f.flush() #在文件关闭前,就把写入的内容刷到硬盘
f.read(n) #默认则读取文件的全部内容,加参数则读取前几个字符(如果以b的方式打开则读取几个字节)
f.readline() #按行读取,默认读取当前指针所在的行
f.seek(n) #调整指针的位置,把指针放在n个字节处
f.tell() #获取指针的位置
f.truncate() #截取开始至当前指针位置中的内容,其他内容则删除
f.write() #向文件中写入内容

seek(0)表示移动到开头,移动到结尾: seek(0,2) seek的第⼆个参数表⽰的是从哪个位置进⾏偏移, 默认是0, 表 ⽰开头, 1表⽰当前位置, 2表⽰结尾

f.readlines()  #把所有的行读入列表中,如果文件中的行数很多,内存消耗会很大,适应于行数较少的问件
f.xreadline() #2.x系列才有,生成文件每行的迭代器,相当于for i in f:

for循环打印输出文件的每一行:

f = open('history2.log','r+',encoding='utf-8')
for line in f:
print(line) #循环打印输出每一行

 三、with文件打开方式

用with打开文件,with会自动给关闭,无需用f.close()

用with可以同时打开两个文件

with open('history2.log','r+',encoding='utf-8') as f:
data = f.read()
print(data)#最后无需f.close(),with语句会自动给关闭文件
#python2.7及以后版本支持同时打开多个文件
with open('history1.log','r+',encoding='utf-8') as f1,open('history2.log','r',encoding='utf-8') as f2:
print(f1.read())
print(f2.read())

【python之路19】文件操作的更多相关文章

  1. 小白的Python之路 day2 文件操作

    文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  2. python之路(五)-文件操作

    文件操作无非两个,即:读.写 python 2.x: 文件句柄 = file('文件路径', '模式') python3.x: 文件句柄 = open('文件路径', '模式') 打开文件的模式有: ...

  3. python之路---08 文件操作

    二十六.   文件 f = open(文件路径,mode = '模式',encoding = '编码格式') 1.基础 ① 读写时,主要看光标的位置 ②操作完成要写    f.close( ) f.f ...

  4. python成长之路五-文件操作

    1,文件操作 f = open("D:\种子.txt",encoding="utf-8",mode="r") # 打开一个种子.txt文件, ...

  5. Python学习之路4 - 文件操作&编码转换

    文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式, ...

  6. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  7. python 函数初识和文件操作

    文件操作  打开文件:文件句柄 = open('文件路径', '模式')  打开文件的模式 w #以写的方式打开 (不可读,不存在则创建,存在则删除内容) a #以追加的模式打开(可读, 不存在则创建 ...

  8. python基础学习笔记——文件操作

    文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...

  9. Python基础知识(八)----文件操作

    文件操作 一丶文件操作初识 ###f=open('文件名','模式',编码): #open() # 调用操作系统打开文件 #mode #对文件的操作方式 #encoding # 文件的编码格式 存储编 ...

随机推荐

  1. 关于SqlServer的内连接,外链接以及left join,right join之间的一些问题与区别。

    就我个人理解通俗点来说内连接和外连接区别: 内连接 inner join或者 join (被默认为内连接) : 内连接的原理是:先进行语句判断和运行得出结果,然后在将结果连接起来,一般是横着连接. 外 ...

  2. yii2下使用支付宝

    最近入坑了yii2 感觉是个很强大的框架.使用yii做支付宝的移动支付的时候出了点问题,记录下来避免以后忘记了. 使用的是支付宝立即到账的功能,网上很多集成好的接口我就不重复了,找不到的话github ...

  3. OSG实现正八面体剖分成球

    #include<Windows.h> #include<osg/Node> #include<osg/Geode> #include<osg/Group&g ...

  4. javascript 解析ajax返回的xml和json格式的数据

    写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心 ...

  5. PostgreSQL的架构

    是最先进的数据库.他的第一个版本在1989年发布,从那时开始,他得到了很多扩展.根据db-enginers上的排名情况,PostgreSQL目前在数据库领域排名第四. 本篇博客,我们来讨论一下Post ...

  6. phpqrcode.php 生成二维码图片用于推广

    <?php /* * PHP QR Code encoder * * This file contains MERGED version of PHP QR Code library. * It ...

  7. vue.js_09_vue-父子组件的传值方法

    1.父向子传递数据 1>定义一个父组件和一个子组件 2>父组件通过v-bind绑定传递的数据  :parentmsg="msg" 3>子组件需要通过 props: ...

  8. int 13h,磁盘中断

    直接磁盘服务(Direct Disk Service——INT 13H)  00H —磁盘系统复位 01H —读取磁盘系统状态 02H —读扇区 03H —写扇区 04H —检验扇区 05H —格式化 ...

  9. Java 后端彻底解决跨域问题(CORS)

    接口调用出现跨域问题时,浏览器会报如下提示 XMLHttpRequest cannot load xxx. Request header field Authorization is not allo ...

  10. 扫描线矩形周长的并 POJ1177

    //扫描线矩形周长的并 POJ1177 // 我是按x轴 #include <iostream> #include <cstdio> #include <cstdlib& ...