1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集")

2.模式: r , w , a , r+ , w+ , a+ , rb , wb , ab , r+b , w+b , a+b .

3.常用的操作

(1)光标(seek)

(2)tell: 索取光标位置.

(3)truncate: 截断文件

4.修改文件

一.文件操作的函数

open(文件名(路径), mode = "模式" , encoding = "字符集")

路径: 1.绝对路径,从磁盘根目录寻找 或者 从互联网上寻找一个路径(链接).

f = open("e:/abc/李时珍的皮.txt",mode = 'r', encoding = "gbk")
s = f.read()
print(s)
f.c'lose()

2.相对路径(用的多),相当于当前程序所在的文件夹   ../表示上一层文件夹.

f = open ("哈哈哈", mode = 'r', encoding = "utf-8")
s = f.read()
print(s)
f.close() # 如果没有这句话, 你在下面的程序中如果删除这个文件. 就会报错

二.文件操作模式

(1)  r模式: 读文件

f = open("呵呵呵", mode = "r", encoding = "utf-8")
for line in f: # 文件是一个可迭代对象
print(line.strap()) #一行一行的处理数据
lis = f.readline()
print(lis)
f.close()

(2) w模式: 写文件

带 w 的,只要你操作了,就会清空源文件.

如果文件不存在,会自动创建文件.

f = open("阿西吧", mode = "w", encoding = "utf-8")
f.write("呀,养狗了没有?\n") #\n 换行
f.write("养狗了,思密达")
f.flush()
f.cliose()

(3) a模式: 追加文件

写的时候,换行需要手动控制   \n

f = open("阿西吧", mode = "a", encoding = "utf-8")
f = write("思密达?")
f = write("思密达")
f.flush()
f.close()

(4) rb, wb, ab模式: bytes 处理非文本文件      如果处理非文本文件, mode里有b的, encoding就不给了.

f =open("c:/pdd骚猪.jpg", mode = "rb")   # 从C盘读出,   这里比能写encoding
e =open("e:/pdd骚猪.jpg", mode = "wb") # 写入E盘.
for line in f; # 从C盘读出 你不知道读了多少数据
e.write(line) #写入到E盘
f.close()
e.flush()
e.close()

(5) 带 + 的模式

不论你读取了多少内容,光标在哪儿,写入的时候都是在结尾写入,除非上来就写入,这是写入在开头.

最好用的读写同时存在的模式: r+  读写模式,先读后写, 写入在结尾处.   (深坑需谨慎)

f = open("阿西吧", mode = "r+", encoding = "utf-8)
s = f.read(3) #读取3个字节
print(s)
f.write("不养了,送人了,思密达") # 在句尾写入
f.close()
f = open("德云社", mode = "r+", encoding ="utf-8")
f.write("葫芦娃") # 先写入在句首
s = f.read()
print(s)
f.read(2)
print(s) #读取光标在句中
f.write("还有何云伟") # 写入还是在句尾
f.cliose

很少用的 w+ 读写模式,因为在写入时会清空文件中的源内容

f = open("德云社", mode = "w+", encoding = "utf-8")
f.write("小岳岳也要退出德云社") #写完之后,光标在最后, 读取是没有内容的.
f.seek(0) #移动光标,移动到开头
s = f.read()
print("读取的内容是,"s) #空内容
f.flush() #刷新文件内容
f.close()

a+ 模式

f =open("德云社", mode = "a+", encoding = "utf-8")
f.write("我也要加入德云社")
s = f.read()
print(s)
f.flush()
f.close()

r+b, w+b, a+b,极少用

三.常用的操作

1.光标(seek) *

seek(0)  开头

seek(0,2)   结尾

2.tell(); 光标的位置

3.truncate  截取文件

f = open("阿西吧", mode = "r", encoding = "utf-8")
for line in f:
print(line.split())
seek(0) #移动到开头
for line in f:
print(line.split())
f.close
f =open("阿西吧", mode = "r", encoding = "utf-8")
f.seek(3) #3byte = i个中文
s = f.read(1) # 读取一个字符
print(f.tell()) #光标在哪?
f.close()

seek(偏移量,位置)

seek(0)  开头

seek(0,2)  在末尾的偏移量是0,   末尾

truncate  截取文件

f = open("我嘞个去", mode = "w", encoding = "utf-8")
f.write("试试就试试")
f.seek(9)
print(f.tell()) #从文件开头截取到光标位置
f.truncte(12) #如果给出参数,从头截取到参数位置.
f.close()

四.修改文件

1.引入os模块

2.打开目标文件, r

3.打开文件副本, w

4. 从 r 中读取内容进行修改,写到副本中

5.删除源文件

6.重命名副本

例:#引入模块improt...打开目标文件

f =open("alex昨天又去哪了", mode = "r", encoding = "utf-8")
with open("alex昨天又去哪了", mode = "r", encoding = "utf-8") as f ,\
open("alex昨天又去哪了_副本", mode = "r", encoding = "utf-8") as f1:
for line in f:
line = line.replace("alex","帅B")
        f1.write(line)
os.remove("alex昨天又去干嘛了")
os.rename("alex昨天又去干嘛了_副本","alex昨天又去干嘛了")

例:

id,name,phone,car,home,salary

1,alex,10086,特斯拉,于辛庄,5000000

2,wusir,10010,五菱宏光,青年,400000

3,taibai,10000,魔板单车,松兰堡,30000

4,ritian,12345,小黄车,广东lis = []

with open("2018-08-06.log", mode = "r", encoding = "utf-8") as f:
first = f.readline().strip().split(",")
for line in f:
dic = {} #每一行一个字典
ls = line.strip().split(",")
for i in range(len(first)):
dic[first[i]] = ls[i]
lis.append(dic)
print(lis)
#

[{'id': '1', 'name': 'alex', 'phone': '10086', 'car': '特斯拉', 'home': '于辛庄', 'salary': '5000000'}, {'id': '2', 'name': 'wusir', 'phone': '10010', 'car': '五菱宏光', 'home': '青年', 'salary': '400000'}, {'id': '3', 'name': 'taibai', 'phone': '10000', 'car': '魔板单车', 'home': '松兰堡', 'salary': '30000'}, {'id': '4', 'name': 'ritian', 'phone': '12345', 'car': '小黄车', 'home': '广东', 'salary': '30000'}]



python 文件操作: 文件操作的函数, 模式及常用操作.的更多相关文章

  1. python+selenium实现动态爬取及selenuim的常用操作

    应用实例可以参考博客中的12306自动抢票应用 https://www.cnblogs.com/mumengyun/p/10001109.html 动态网页数据抓取 什么是AJAX: AJAX(Asy ...

  2. [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)

    温馨提示      建议你先了解一下上一篇博文([Android L]SEAndroid增强Androd安全性背景概要及带来的影响)所讲的内容,先对SEAndroid窥个全貌,然后再继续本节内容.   ...

  3. Python基础(二) —— 字符串、列表、字典等常用操作

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...

  4. einsum函数介绍-张量常用操作

    einsum函数说明 pytorch文档说明:\(torch.einsum(equation, **operands)\) 使用基于爱因斯坦求和约定的符号,将输入operands的元素沿指定的维数求和 ...

  5. python笔记2-数据类型:元组、字典常用操作

    元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tp=(1,2,3,'a','b' ...

  6. 【python+selenium的web自动化】- 控制浏览器的常用操作

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 前言 ​ 本文主要介绍se ...

  7. python anaconda 常用操作;conda 命令指南

    在使用 python anaconda时,经常会用到很多常用操作,记录下来,方便以后更好地使用: conda: Conda既是一个包管理器又是一个环境管理器.你肯定知道包管理器,它可以帮你发现和查看包 ...

  8. Python数据类型及常用操作

    Python字符串类型 1.用途: 用来记录有描述性的状态.比如:人名,地址等. 2.定义方式: 创建字符串非常简单,在‘ ’,“ ”,‘’‘ ’‘’内一填写一系列的字符例如:msg='hello' ...

  9. 【python+selenium的web自动化】- 元素的常用操作详解(一)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.元素 ...

随机推荐

  1. eclipse创建maven组合项目

    创建普通maven项目作为父项目: packaging类型选择pom. 创建子项目即可(需要mvn eclipse:eclipse构建为eclipse项目)

  2. Node.js之process模块

    注意⚠️:process为nodejs内置对象,不需要实例化,改模块用来与当前进程进行互动,可以通过全局变量process访问,它是一个EventEmitter对象的实例. process对象提供一系 ...

  3. Navicat Premium 12安装与激活

    https://www.jianshu.com/p/42a33b0dda9c 若使用Navicat Premium 12.1.10.0请转至Navicat Premium 12.1.10.0安装与激活 ...

  4. elk-Logstash

    ELK是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 2. Logs ...

  5. Windows 8 禁用强制驱动签名

    打开管理员模式的命令行,运行命令: bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS bcdedit/set testsigning on ...

  6. idea插件JRebel 解决热编译,开启高级debug之路

    idea自身的debug模式遇到 类属性增加什么的只能重启,不能做到更深层次的热部署...至于为啥不能,---这是java自身类加载机制导致的?这个问题可以以后深究(貌似很深奥)....本文的重点是介 ...

  7. ConcurrentModificationException原因及排除

    如何产生,一边遍历一边修改元素,产生iter后再修改原结构,如下,无论是for中或iter都会产生ConcurrentModificationException import java.util.Ar ...

  8. 基于官方镜像MySQL做自定义业务扩充镜像

    转自:https://www.cnblogs.com/jsonhc/p/7809571.html 首先从https://hub.docker.com/_/mysql/拉取官方镜像,如果速度缓慢,建议添 ...

  9. jenkins+docker+docker-compose完整发版流程

    首先搭建jenkins+maven+nexus这一套自动化打包工具,并配置好相应配置,这里就不再赘述了. 其次,搭建好docker集群和私有仓库,以及安装好docker-compose工具,配置好相应 ...

  10. 自定义标签在IE6-8的困境

    或许未来前端组件化之路都是自定义标签,但这东西早在20年前,JSTL已在搞了.现在Web Component还只有webkit支持.但一个组件库,还需要一个特殊的标识它们是一块的.不过这个XML已经帮 ...