当前位置: 首页 > news >正文

python open文件_Python open()文件处理使用介绍

1. open()语法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])

open函数有很多的参数,常用的是file,mode和encoding

file文件位置,需要加引号

mode文件打开模式,见下面3

buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;

encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;

errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。

newline可以取的值有None, \n, \r, ”, ‘\r\n',用于区分换行符,但是这个参数只对文本模式有效;

closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。

2. Python中file()与open()区别

两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,建议使用open

3. 参数mode的基本取值

Character

Meaning

‘r'

open for reading (default)

‘w'

open for writing, truncating the file first

‘a'

open for writing, appending to the end of the file if it exists

‘b'

binary mode

‘t'

text mode (default)

‘+'

open a disk file for updating (reading and writing)

‘U'

universal newline mode (for backwards compatibility; should not be used in new code)

r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;

b、t、+、U这四个字符,与以上的文件打开模式组合使用,二进制模式,文本模式,读写模式、通用换行符,根据实际情况组合使用、

常见的mode取值组合

r或rt 默认模式,文本模式读

rb 二进制文件

w或wt 文本模式写,打开前文件存储被清空

wb 二进制写,文件存储同样被清空

a 追加模式,只能写在文件末尾

a+ 可读写模式,写只能写在文件末尾

w+ 可读写,与a+的区别是要清空文件内容

r+ 可读写,与a+的区别是可以写到文件任何位置

4. 测试

测试文件test.txt,内容如下:

Hello,Python

www.jb51.net

This is a test file

用一小段代码来测试写入文件直观的显示它们的不同

test = [ "test1\n", "test2\n", "test3\n" ]

f = open("test.txt", "a+")

try:

#f.seek(0)

for l in test:

f.write(l)

finally:

f.close()

a+、w+和r+模式的区别(测试后还原test.txt)

a+模式

# cat test.txt

Hello, Python

www.jb51.net

This is a test file

test1

test2

test3

w+模式

# cat test.txt

test1

test2

test3

r+模式

在写入文件前,我们在上面那段代码中加上一句f.seek(0),用来定位写入文件写入位置(文件开头),直接覆盖字符数(注意\n也是一个字符)

# cat test.txt

test1

test2

test3

inuxeye.com

This is a test file

注意:r+模式打开文件时,此文件必须存在,否则就会报错,‘r'模式也如此

其他测试

>>> f = open('test.txt')

>>> f.read() #读取整个文件,字符串显示

'Hello,Python\nwww.jb51.net\nThis is a test file\n'

>>> f.read() #指针在文件末尾,不能再读取内容

''

>>> f = open('test.txt')

>>> f.readline() #一次读一行,指针在该行末尾

'Hello,Python\n'

>>> f.tell() #改行的字符长度

13

>>> f.readline()

'www.jb51.net\n'

>>> f.tell()

30

>>> f.readline()

'This is a test file\n'

>>> f.tell()

50

>>> f.readline()

''

>>> f.tell() #指针停在最后一行

50

>>> f = open('test.txt')

>>> f.readlines() #读取整个文件,以列表显示

['Hello,Python\n', 'www.jb51.net\n', 'This is a test file\n']

>>> f.tell() #指针在最后一行

50

>>> f = open('test.txt','w') #覆盖创建新文件

>>> f.write('Hello,Python!') #如果写入内容小于1024,会存在内存,否则需要刷新

>>> f.flush() #写入到硬盘

>>> f.close() #关闭文件会自动刷新

>>> f.write('Hello,Linuxeye') #关闭后,写失败,提示文件已经关闭

Traceback (most recent call last):

File "", line 1, in

ValueError: I/O operation on closed file

相关文章:

  • java教务管理系统数据库设计_[源码和文档分享]基于JAVA和SQL SERVER数据库实现的酒店管理系统...
  • 执行python代码的方式_用Python执行程序的4种方式,编程必备
  • WPS怎么统计相同名称的数据_教你如何将垃圾的WPS,玩得高大上!
  • vue radio双向绑定_Vue双向数据绑定,时间介绍,ref获取dom节点
  • 抓包实时打印_【硬货分享】 某网红打印机安全分析(下)
  • import pandas as pd 报错_Python数据处理,用pandas解决分段匹配,简单到没朋友
  • cricheditview实现语法高亮和行号_[源码和文档分享]基于VC++和QT实现的图的可视化工具...
  • table 内 下拉列表 被遮挡_Emacs Hack - 通过列表数据创建表格
  • 取出url中的字符_python爬虫,解决大众点评字符库反爬机制的经验
  • 单调有界定理适用于函数吗_实数系的连续性定理
  • java map获取第一个值_深入理解 Java 函数式编程(4): 使用 Vavr 进行函数式编程...
  • 层次聚类算法_聚类分析算法
  • centos如何复制粘贴_教你Vim编辑器,如何删除一行或者多行内容
  • java更改模块状态_2020年4月Github上最热门的Java开源项目
  • 佳能g3800故障灯说明书_啄木鸟家庭维修|天花机故障灯闪什么问题
  • 【comparator, comparable】小总结
  • 【译】理解JavaScript:new 关键字
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • axios 和 cookie 的那些事
  • co.js - 让异步代码同步化
  • docker python 配置
  • download使用浅析
  • egg(89)--egg之redis的发布和订阅
  • export和import的用法总结
  • gcc介绍及安装
  • iOS 系统授权开发
  • Java|序列化异常StreamCorruptedException的解决方法
  • java8 Stream Pipelines 浅析
  • Java到底能干嘛?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Python socket服务器端、客户端传送信息
  • Redis 中的布隆过滤器
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开发基于以太坊智能合约的DApp
  • 老板让我十分钟上手nx-admin
  • 前端路由实现-history
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • AI算硅基生命吗,为什么?
  • FaaS 的简单实践
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (办公)springboot配置aop处理请求.
  • (补)B+树一些思想
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十六)一篇文章学会Java的常用API
  • (数据结构)顺序表的定义
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)JAVA中的堆栈
  • (转)linux下的时间函数使用
  • (转)nsfocus-绿盟科技笔试题目
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。