python 文件操作: 文件操作的函数, 模式及常用操作.
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 文件操作: 文件操作的函数, 模式及常用操作.的更多相关文章
- python+selenium实现动态爬取及selenuim的常用操作
应用实例可以参考博客中的12306自动抢票应用 https://www.cnblogs.com/mumengyun/p/10001109.html 动态网页数据抓取 什么是AJAX: AJAX(Asy ...
- [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)
温馨提示 建议你先了解一下上一篇博文([Android L]SEAndroid增强Androd安全性背景概要及带来的影响)所讲的内容,先对SEAndroid窥个全貌,然后再继续本节内容. ...
- Python基础(二) —— 字符串、列表、字典等常用操作
一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...
- einsum函数介绍-张量常用操作
einsum函数说明 pytorch文档说明:\(torch.einsum(equation, **operands)\) 使用基于爱因斯坦求和约定的符号,将输入operands的元素沿指定的维数求和 ...
- python笔记2-数据类型:元组、字典常用操作
元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tp=(1,2,3,'a','b' ...
- 【python+selenium的web自动化】- 控制浏览器的常用操作
如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 前言 本文主要介绍se ...
- python anaconda 常用操作;conda 命令指南
在使用 python anaconda时,经常会用到很多常用操作,记录下来,方便以后更好地使用: conda: Conda既是一个包管理器又是一个环境管理器.你肯定知道包管理器,它可以帮你发现和查看包 ...
- Python数据类型及常用操作
Python字符串类型 1.用途: 用来记录有描述性的状态.比如:人名,地址等. 2.定义方式: 创建字符串非常简单,在‘ ’,“ ”,‘’‘ ’‘’内一填写一系列的字符例如:msg='hello' ...
- 【python+selenium的web自动化】- 元素的常用操作详解(一)
如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html 本篇主要内容:1.元素 ...
随机推荐
- Java base64 图片编码转换
package com.test; import org.junit.Test; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode ...
- hdfs线上修改 nameserivce
hdfs线上修改 nameserivce(ns1 修改为 ns2) 1.去core-site.xml.hdfs-site.xml 把ns1 -> ns2 同步所有节点 2.去journal 数据 ...
- 详述 IntelliJ IDEA 插件的安装及使用方法
首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins; Windows:File -> Settings -> Pl ...
- 腾讯云Linux VPS新硬盘分区与挂载教程(面板重装不丢失数据)
以腾讯云Centos系统服务器为例,小记的是数据盘不在本地,大小为20G,以下的教程来自小夕博客的一篇相关添加教程的修改,适合腾讯云Linux Centos系统.说明:参数也许不对,我没有截图了,但所 ...
- LeetCode 题解 Search a 2D Matrix II。巧妙!
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30 ...
- Linux主机如何用ssh去登录docker容器的步骤
进入终端,sudo -i,切换root,输入docker -d 打开另一个终端,切换root,输入docker search ubuntu,大概如下结果: NAME ...
- 跨域(一)——CORS机制
Ajax是严格遵守同源策略的,既不能从另一个域读取数据,也不能发送数据到另一个域.但是,W3C的新标准中CORS(Cross Origin Resource Sharing)推进浏览器支持这样的跨域方 ...
- 注解(Annotation)是什么?
- 17.泛型.md
目录 1.Generic概念 2.泛型类 2.1定义泛型类 定义泛型: 注意要点 2.2泛型类的继承 2.3类型通配符 2.4设置类型形参上下限 上限 下限 2.5泛型接口 定义方法 注意要点 3.泛 ...
- scala private
class Person private(val name:String) private 修饰整个类的参数,其实效果类似于java的私有化构造方法,无法通过new Person(..) 来实例化对象 ...