一、初识文件操作

  使用python来读写文件是非常简单的操作,我们使用open函数来打开一个文件,获取到

文件句柄,然后通过文件句柄就可以进行各种各样的操作,同过打开方式的不同能够执行的

操作也会有相应的差异。

  打开文件的方式有:r,w, a, r+,w+, a+, rb,  wb, ab, r+b, w+b, a+b 默认使用的r模式打

开文件。

二、只读操作(r,rb)

  

 f = open('文件1.txt' , mode = 'r', encoding = 'utf-8')
content = f.read()
print(content)
f.close()

  需要注意encoding表示编码集。根据文件的实际保存编码惊醒获取数据,对我们而言更多

的是utf-8.

  rb 读取出来的数据是bytes类型,在rb模式下。不能选择encoding字符集

 f = open('文件1.txt' , mode = 'rb')
content = f.read()
print(content)
f.close()

  rb 的作用:一般用来读取一些非文本文件,比如像MP3、视频之类的文件。这些文件是无法

直接显示在屏幕上的。

绝对路径和相对路径

  1.绝对路径:从磁盘根目录开始一直到文件名

  2.相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言,如果在同一个文件夹中,则相对路径就是这个文件名,如果在上一层文件夹。则需要用  ../  来返回本文件加的上层目录。

  读取文件方法:

  read()  将文件中的所有内容都读出来

  read(n)读取n个字符

  readline()一次读取一行数据

  readlines()将每一行形成一个元素,放到一个列表中,将所有的内容都读出来。

  循环读取

 f = open("文件1",mode = "r",encoding = 'utf-8')
for line in f:
print(line.strip())
4 f.close()

三、写模式
  写的时候,如果没有源文件则会创建源文件,如果文件存在,则将源文件原来的文件内容删除,在写入内容

with open("文件1",mode = "w",encoding = "utf-8") as f:
f.write("我是谁")

  wb 模式下。可以不指定打开文件的编码,但是在写的时候必须将字符串转换成utf-8的bytes数据。

  

 with open("文件1",mode = "wb") as f:
f.write("我是谁".encode('utf-8'))

四、追加(a,ab)

  在追加模式下,写入的内容会追加在文件的结尾

f = open("文件", mode="a", encoding="utf-8")
f.write("麻花藤的最爱")
f.flush()
f.close()

五、读写模式(r+,r+b)

  对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完之后在进行写入。

 f = open("文件", mode="r+", encoding="utf-8")
content = f.read()
f.write("麻花藤的最爱")
print(content)
f.flush()
f.close() 结果:
正常的读取之后, 写在结尾

六、 写读(w+,w+b)

  先将所有的内容清空,然后在写入,最后读取,但是在读取的内容是空的

 f = open("文件", mode="w+", encoding="utf-8")
f.write("哈哈")
content = f.read()
print(content)
f.flush()
f.close()

七、追加读(a+)

  a+模式下,不论是先读还是后读,都是读不到数据的

 f = open("文件", mode="a+", encoding="utf-8")
f.write("马化腾")
content = f.read()
print(content)
f.flush()
f.close()

八、其它相关操作

  1.seek(n)光标移动到n 位置,ps:移动的单位是byte,所以如果是utf-8的中文部分要用的是3的倍数。

  通常使用的是将光标移动到开头或者结尾。

  移动到开头:seek(0)

  移动到结尾:seek(0,2)

  ps   seek(0,1)表示当前位置

f = open("文件", mode="r+", encoding="utf-8")
f.seek(0) # 光标移动到开头
content = f.read() # 读取内容, 此时光标移动到结尾
print(content) f.seek(0) # 再次将光标移动到开头
f.seek(0, 2) # 将光标移动到结尾 content2 = f.read() # 读取内容. 什么都没有
print(content2) f.seek(0) # 移动到开头
f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9 f.flush()
f.close()

  2.tell()  通过它可以获取光标的当前位置

 f = open("文件", mode="r+", encoding="utf-8")
f.seek(0) # 光标移动到开头
content = f.read() # 读取内容, 此时光标移动到结尾
print(content)
f.seek(0) # 再次将光标移动到开头
f.seek(0, 2) # 将光标移动到结尾
content2 = f.read() # 读取内容. 什么都没有
print(content2)
f.seek(0) # 移动到开头
f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9
print(f.tell()) # 光标位置9
f.flush()
f.close()

  3.truncate()截断文件

 f = open("文件", mode="w", encoding="utf-8")
f.write("哈哈") # 写入两个字符
f.seek(3) # 光标移动到3, 也就是两个字中间
f.truncate() # 删掉光标后面的所有内容
f.close()
f = open("⼩小娃娃", mode="r+", encoding="utf-8")
content = f.read(3) # 读取12个字符
f.seek(4)
print(f.tell())
f.truncate() # 后⾯面的所有内容全部都删掉
# print(content)
f.flush()
f.close()

九、文件的修改以及文件的另一种打开方式

  文件的修改只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文件删除,将新文件的文件名改为原来文件的文件名。

 

 # ⽂文件修改
import os with open("小娃娃", mode="r", encoding="utf-8") as f1,\
open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
  content = f1.read()
  new_content = content.replace("冰糖葫芦", "大白梨")
  f2.write(new_content) os.remove("小娃娃") # 删除源文件
os.rename("小娃娃_new", "⼩小娃娃") # 重命名新⽂件

  弊端:一次将所有内容进行读取,内存溢出。解决方案:一行一行的读取和操作

 import os

 with open("小娃娃", mode="r", encoding="utf-8") as f1,\
open("小娃娃_new", mode="w", encoding="UTF-8") as f2: for line in f1:
new_line = line.replace("大白梨", "冰糖葫芦")
f2.write(new_line) os.remove("小娃娃") # 删除源文件
os.rename("小娃娃_new", "小娃娃") # 重命名新⽂文件

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模式会自动新建此文件夹,当读模式 ...

  10. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

随机推荐

  1. Java 数组中寻找最大子数组

    程序设计思想: 依次将数组划分开,先判断一个元素的单个数组大小,接下来两个,依次上升,最后将所得结果进行比较赋值,输出最大结果. 1 package ketangTest; //张生辉,康治家 201 ...

  2. 08 Python基础数据结构

    目录: 1) 列表 2) 元组 3) 字符串 4) bytes 5) bytearray 6) 字典 7) 集合 8) 冻集合 """1. 列表特性2. 创建3. 增加4 ...

  3. MySQL 分库、分表

    Mysql Sharding 前言 1)Sharding是按照一定规则重新分布数据的方式 2)解决单机写入压力过大和容量问题 3)  解决单机查询慢的问题 4)本文主要根据用户登录场景分析 Shard ...

  4. Mongodb学习总结(2)——MongoDB与MySQL区别及其使用场景对比

    对于只有SQL背景的人来说,想要深入研究NoSQL似乎是一个艰巨的任务,MySQL与MongoDB都是开源常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数 ...

  5. 常州模拟赛d7t2 数组

    题目背景 HJZ 有很多玩具.他最喜欢玩的玩具是一个可以变化的数组. 题目描述 HJZ 的数组初始时有 n 个元素.他可以把一个位置上的数加上或减去一个固定的 数 x. 一天 LJZ 和 HZY 来 ...

  6. hdu 5050 java程序求大数最大公约数

    import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main { pu ...

  7. IM聊实现客户端之间信息交互需求文档

    终于放假啦~之前学习太忙很多知识点都没有写博客,可能自己学会了但没有分享给大家,接下来几天我可能把一些学过的东西整理成博客发出来供大家相互学习交流. 需求分析说明书 HuaXinIM聊软件 潘浩 20 ...

  8. 【驱动开发】file_operations ---linux 2.6.30

    路径: linux-2.6.30/include/linux/fs.h struct file_operations { struct module   *owner; loff_t         ...

  9. 最小生成树 I - Agri-Net

    Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet c ...

  10. 17、Java并发性和多线程-避免死锁

    以下内容转自http://ifeve.com/deadlock-prevention/: 在有些情况下死锁是可以避免的.本文将展示三种用于避免死锁的技术: 加锁顺序 当多个线程需要相同的一些锁,但是按 ...