文件的打开方式


打开方式 详细释义
r  以只读方式打开文件。文件的指针会放在文件的开头。这是默认模式。
rb  以二进制只读方式打开一个文件。文件指针会放在文件的开头。
r+  以读写方式打开一个文件。文件指针将会放在文件的开头。(读取文件时,只能读,不能新建,如果文件没有,则会异常报错)
rb+  以二进制读写方式打开一个文件。文件指针会放在文件的开头。
w  以写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件
wb  以二进制写入方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件
w+  以读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件
wb+  以二进制读写方式打开一个文件。如果该文件已存在,则将其覆盖。如果该文件不存在,则创建新文件
a  以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入
ab  以二进制追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入
a+  以读写方式打开一个文件,如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入
ab+  以二进制追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件尾,新的内容会写入到已有内容之后,如果该文件不存在,则创建新文件来写入

文件的读操作


示例:

 print("->文件句柄的获取,读操作:")

 f = open('无题','r',encoding='utf8') #此行作用就是获取文件句柄
d = f.read() #read方法读取文件所有内容
f.close()
print(d) print('->例二:')
f = open('无题','r',encoding='utf8')
e = f.read(9) #read方法中索引表示读取字符数
f.close()
print(e)
#python3中,文件中一个中英文都占位1

运行结果:

->文件句柄的获取,读操作:
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
->例二:
昨夜星辰昨夜风

文件的写操作


知识点:

    1. 写操作前,文件先格式化清空文件

    2.清空操作,在执行open的w方法后,清空

 print("写的操作,写文件的时候,不能调用读方法,读文件的时候,不能调用写方法")

 f = open('python','w',encoding='utf8')
f.write("I must learn python \nbecause, python is important \n")
f.write("java is better?")
f.write("maybe") #上面的语句,没有加换行符,所以输出的内容是紧接的
f.close()

运行结果:

打开文件后显示如下

I must learn python
because, python is important
java is better?maybe

文件的append方法


语法格式:

f = open('文件名','a','encoding = utf8')

文件这种方法为追加模式:1, 空白文件中,直接从头开始写入内容; 2 有内容的文件,会在末尾开始继续写入内容

示例:

f = open('python','a',encoding='utf8')
f.write("花开又花落")
f.close()

运行结果:

I must learn python
because, python is important
java is better?maybe花开又花落

readline 和 readlines


readline是逐行读取

readlines是全文读取


示例1 readline示例:

# -*-  coding:utf-8 -*-
'''
实际的工作中,使用的方法几乎为readline方法
'''
print("readline方法")
f = open('无题','r',encoding='utf-8')
a = f.readline() #读取一行内容
print("此时光标位置:",f.tell())
b = f.readline() #继续读取一行内容
print("此时光标位置:",f.tell())
print(a.strip()) #strip是字符串方法中去除空格和换行的方法
print(b.strip())

运行结果:

readline方法
此时光标位置: 23
此时光标位置: 46
昨夜星辰昨夜风
画楼西畔桂堂东

我读取的文件内容原件:

昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
南京
江苏
中国

示例2 文件内容的遍历示例:

#遍历文件,在第四行打印分割线,然后继续循环
count = 0
f = open('无题','r',encoding='utf-8')
for line in f:
if count == 3:
print('%%%%####%%%%')
count+=1
continue
print(line.strip())
count+=1
f.close()

运行结果:

昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
%%%%####%%%%
南京
江苏
中国

 


示例3 readlines方法:

print("readlines方法,会将每行的内容组成一个列表打印")
f = open('无题','r',encoding='utf8')
c = f.readlines()
print(c)
print(id(c))
print(id(f))
for i in c:
print(i.strip())
print("遍历方法")
f.seek(0) #将文件指针设置到初始位置,就是文件开头
for i in f:
print(i.strip())
f.close() #文件的操作中,close()方法一定不能忘记

运行结果:

readlines方法,会将每行的内容组成一个列表打印
['昨夜星辰昨夜风\n', '画楼西畔桂堂东\n', '身无彩凤双飞翼\n', '心有灵犀一点通\n', '南京\n', '江苏\n', '中国']
38154568
3902272
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
南京
江苏
中国
遍历方法
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
南京
江苏
中国

文件的tell() 和 seek()方法


示例:

f = open('无题','r',encoding='utf8')
f.read(4)
print('当前光标位置',f.tell()) f.seek(10)
print('当前光标位置',f.tell())
f.close() #read时,一个中文算三个字符

运行结果:

当前光标位置 12
当前光标位置 10

文件操作之flush方法


import sys,time

for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(1)

truncate方法


f = open('test','w')
f.write("hello")
f.write("\n")
f.write("python")
f.flush() #这样不用执行close方法,内存中的数据,就会写入到disk
f.close() f = open('test','a')
f.truncate(2) #截断方法,光标从2开始往后截取
f.close()

文件常用的方法汇总如下:

#-- 文件基本操作
output = open(r'C:\spam', 'w') # 打开输出文件,用于写
input = open('data', 'r') # 打开输入文件,用于读。打开的方式可以为'w', 'r', 'a', 'wb', 'rb', 'ab'等
fp.read([size]) # size为读取的长度,以byte为单位
fp.readline([size]) # 读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readlines([size]) # 把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长。
fp.readable() # 是否可读
fp.write(str) # 把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) # 把seq的内容全部写到文件中(多行一次性写入)
fp.writeable() # 是否可写
fp.close() # 关闭文件。
fp.flush() # 把缓冲区的内容写入硬盘
fp.fileno() # 返回一个长整型的”文件标签“
fp.isatty() # 文件是否是一个终端设备文件(unix系统中的)
fp.tell() # 返回文件操作标记的当前位置,以文件的开头为原点
fp.next() # 返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence]) # 将文件打操作标记移到offset的位置。whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。
fp.seekable() # 是否可以seek
fp.truncate([size]) # 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
for line in open('data'):
print(line) # 使用for语句,比较适用于打开比较大的文件
open('f.txt', encoding = 'latin-1') # Python3.x Unicode文本文件
open('f.bin', 'rb') # Python3.x 二进制bytes文件
# 文件对象还有相应的属性:buffer closed encoding errors line_buffering name newlines等

python3速查参考- python基础 5 -> 常用的文件操作的更多相关文章

  1. python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda

    函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...

  2. python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

    基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...

  3. python3 速查参考- python基础 7 -> 函数编程之 装饰器、生成器

    装饰器 1.速查笔记 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 @staticmethod def sme ...

  4. python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习

    元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...

  5. python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令

    前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...

  6. python3速查参考- python基础 3 -> -> while循环实例 + Continue && break的应用 + 列表的初步学习

    while语句的应用 实例如下: """ 述求:用户登录系统,最多只能登录三次 第三次失败后,程序终止 """ user_table = { ...

  7. python3速查参考- python基础 1 -> python版本选择+第一个小程序

    题外话: Python版本:最新的3.6 安装注意点:勾选添加路径后自定义安装到硬盘的一级目录,例如本人的安装路径: F:\Python 原因:可以自动添加python环境变量,自动关联.py文件,其 ...

  8. python3速查参考- python基础 2 -> if语句应用 + while循环应用

    if语句应用之——求最大值 """ 求三个数字中的最大值,并打印出来 """ a = int(input("a:")) ...

  9. python基础(四)文件操作和集合

    一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...

随机推荐

  1. Linux文件系统之目录管理mkdir命令

    mkdir命令 mkdir命令mkdir命令简介mkdir命令用来创建指定的名称的空目录,要求创建用户在当前目录具有权限,并且制定的目录名不能是当前目录中已有的目录. 命令格式mkdir [选项] [ ...

  2. python中重要的概念:类(class)

    1.名词解释 类:类代表了具有相同特征的一类事物(人) 对象.实例:具体的某一个事物或者是人 实例化:将类变成对象的这么一个过程,即新建一个对象的过程,就是对类的一个实例化过程. 2.格式 函数定义: ...

  3. PHP多维数组去重

    自己写了一个实现多维数组去重的方法, 只是实现了功能, 至于性能没多管~  可以保留key, 这个方法是针对最终的一维数组元素去重, 如果是多维数组的两个子元素是相同的数组, 是不能去重的 prote ...

  4. [Luogu] 树

    https://www.luogu.org/problemnew/show/P4092 树剖 + 线段树区间修改,单点查询 #include <bits/stdc++.h> using n ...

  5. Python基础面试题整理

    基础 Python中lambda是什么意思 Python中的pass是什么意思 作为解释型语言,Python如何运行 什么是Python的单元测试 在Python中unittest是什么 如何将数字转 ...

  6. Appium基础教程

    目录 Appium教程 Appium简介 App自动化测试工具对比 Appium实现原理 环境搭建 Andorid介绍 基本架构 常见布局/视图 基本控件 控件常见属性 Adb介绍 Adb常用命令 A ...

  7. 【java设计模式】-05建造者模式

    建造者模式 简述 建造者模式,是将一个复杂对象的创建和它的表示分离开来,这就使得同样的构建构成可以有不同的表示. 建造者模式是一步步构建一个复杂的对象,允许用户只需要指定复杂对象的类型和必要的内容就可 ...

  8. VMware Workstation 与 Device/Credential Guard 不兼容

    之前在本机搭建Docker for Windows的时候,启用了win10自带的虚拟Hyper-V,但是win10的虚拟与VMware Workstation的虚拟有冲突,运行VMware Works ...

  9. spark安装(windows)

    1.安装jdk 因为spark是依赖java环境的,所以在安装spark之前你先确保你的电脑上有java环境. 具体怎么操作,百度"jdk安装" 2.安装spark 首先到官网下载 ...

  10. mysql5.7 彻底解决sql_mode=only_full_group_by

    ONLY_FULL_GROUP_BY是mysql默认的一种sql模式,其作用是约束sql语句:要求select中的所有字段,除复合函数外,全部要出现在group by中. 默认这种模式是有原因的,因为 ...