一 前言

本篇文章主要对文件操作进行说明,知识追寻者创作必属精品,读完本篇你将获得基础的文件操作能力,深入理解文件操作API,基础真的很重要,不管学什么知识,故看知识追寻者的专题系列真的很不错。

二 open函数介绍

2.1 open函数概览

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

  1. file 可以是给定的文本文件或者是文件字符串形式的名称
  2. mode 模式是操作文件以何种方式打开,比如读,写模式,读取为二进制等;
  3. buffering 是缓存机制(可选参数),设置为0为关闭缓存;设置为1表示行缓存,必须是在文本模式下执行;设置值 大于1 表示固定值的块缓存;不给定参数,系统会设置默认缓存,通常二进制文件是固定大小的块缓存,大小为4096或者8192;
  4. encoding 表示设置编码或者解码,默认的编码解码是跟随平台,必须是文本模式下可执行;用户可以自定义,
  5. errors 可选操作,表示指定如何处理编码异常;如果设置为ignore,可能会造成数据丢失;
  6. newline 表示对换行的具体操作,比如 '\n' , '\r' , '\n\r',必须在文本模式下进行;
  7. closefd 如果设置会False 当文件关闭时,文件的描述会一直打开,造成内存泄漏;通常会在open方法前面加with解决此类问题,否则需要调用close()方法关闭句柄;

2.2 mode 模式介绍

基础模式如下,在不冲突的情况下可以对文件的模式进行自由组合,比如 wb表示以二进制文件形式打开文件进行写操作;

模式 含义
t 文本模式 (默认)
b 二进制模式
w 写入模式
x 创建一个新的文件,并且写入数据
a 在已经存在的文件末尾追加内容
+ 打开磁盘文件对其进行更新操作,可以是读或者写
U 另起一行模式,已经过时,会引起异常

2.3 文件方法介绍

方法名称 方法说明
read(size) 读取文件,size为可选参数为-1或者省略表示读取全部内容
readline() 从文件中读取一行
readlines() 读取多行
write(string) 写入字符串到文件,返回字符数
tell() 返回文件当前位置
close() 关闭文件
flush() 手动冲刷缓存至底层

三 读文件操作

3.1 准备工作

在工程目录下的base目录文件夹下创建一个dir文件夹,专门用于存储文件;创建一个zszxz.txt 文件 内容如下

我以星辰送大海
我以盏杯敬明月

3.2 读取整个文件

  1. 指定文件路径path
  2. 指定模式r 为读操作
  3. 指定编码格式为utf-8
  4. 调用read()方法
path = "dirs/zszxz.txt"
with open(path, 'r', encoding='UTF-8') as file_obj:
content = file_obj.read()
print(content.rstrip())

输出结果

我以星辰送大海
我以盏杯敬明月

3.3读取单行

使用readline()方法会读取单行,对于整个文件需要进行多次读取;

path = "dirs/zszxz.txt"
with open(path, 'r', encoding='UTF-8') as file_obj:
content_1 = file_obj.readline()
print(content_1.rstrip())
content_2 = file_obj.readline()
print(content_2.rstrip())

输出结果

我以星辰送大海
我以盏杯敬明月

3.3 多行读取

  1. 使用readlines()方法返回一个列表
  2. 使用循环遍历读取
path = "dirs/zszxz.txt"
with open(path, 'r', encoding='UTF-8') as file_obj:
lines = file_obj.readlines()
for line in lines:
print(line.rstrip())

输出结果

我以星辰送大海
我以盏杯敬明月

3.4 按行读取

直接对文件进行迭代,能简化代码,提高效率;

path = "dirs/zszxz.txt"
with open(path, 'r', encoding='UTF-8') as file_obj:
for line in file_obj:
print(line.rstrip())

四 写操作

  1. path 指定文件路径
  2. mode 模式为w 表示写入数据
  3. 执行write()方法
  4. 返回count为写如的字符数

写入全部数据

# -*- coding: utf-8 -*-

path = "C:\mydata\generator\zszxz.txt"
with open(path,'w',encoding='UTF-8') as file_obj:
count = file_obj.write("happily reading the article of zszxz")
print(count)

返回结果如下,说明写入了36个字符;

36

五 获取当前位置

  1. path 指定文件路径
  2. mode 模式为 r表示读
  3. 调用readline()方法 表示读取行
  4. 调用tell()方法获取读取文件当前位置
path = "dirs/zszxz.txt"
with open(path, 'r', encoding='UTF-8') as file_obj:
line = file_obj.readline()
position = file_obj.tell()
print(position)
print(line.rstrip())

输出结果

23
我以星辰送大海

python专题文件操作的更多相关文章

  1. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  2. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

  3. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  4. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  5. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  6. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  7. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  8. python的文件操作及简单的用例

    一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...

  9. python基本文件操作

    python文件操作 python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了 基本的文件操作 要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式 ...

随机推荐

  1. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面

    源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目主要是一个素材的分 ...

  2. 2019-11-19-C#-高级面试题

    title author date CreateTime categories C# 高级面试题 lindexi 2019-11-19 08:40:50 +0800 2018-11-12 11:18: ...

  3. 一道非常棘手的 Java 面试题:i++ 是线程安全的吗

    转载自  一道非常棘手的 Java 面试题:i++ 是线程安全的吗 i++ 是线程安全的吗? 相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼.内心肯定还在质疑 ...

  4. js 的this指向问题

    this指向的,永远只可能是对象! this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用. this指向的对象,我们称之为函数的上下文context,也叫函数的调用者. 1:通过函数名直 ...

  5. 基于JWT的Token登录认证(一)

    1.JWT简介 JSON Web Token(缩写 JWT),是目前最流行的跨域认证解决方案. session登录认证方案:用户从客户端传递用户名.密码等信息,服务端认证后将信息存储在session中 ...

  6. 【36.11%】【codeforces 725C】Hidden Word

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. BZOJ3527 推出卷积公式FFT求值

    BZOJ3527 推出卷积公式FFT求值 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 题意: \(F_{j}=\sum_{i&l ...

  8. ES的索引查询和删除

    postman 1.查看es状态 get http://127.0.0.1:9200/_cat/health 红色表示数据不可用,黄色表示数据可用,部分副本没有分配,绿色表示一切正常 2.查看所有索引 ...

  9. 互联网 Java 工程师进阶知识完全扫盲

    互联网 Java 工程师进阶知识完全扫盲:https://github.com/doocs/advanced-java

  10. 基于 HTML5 WebGL 与 WebVR 3D 虚实现实的可视化培训系统

    前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...