python 的基础学习 第九天 文件的操作
1,文件操作
参数:1,文件路径 2,编码方式,3,执行动作(打开方式),只读,只写,,读写,追加和读写。
1 打开文件,得到文件句柄并赋值给一个变量。2. 通过句柄对文件进行操作。3. 关闭文件。
f = open('yuyu',encoding='gbk',mode='r')
#可以设f变量,f_obj,file,f_handler.....等文件句柄。
s = f.read()
print(s)
f.close()
open是windows的系统功能,windows的默认编码方式是gbk,linux操作系统默认为utf-8。
流程:打开一个文件,产生一个句柄,对文件句柄进行操作,然后关闭。
读:r只读
1,文件以什么编码存储的就以什么编码方式打开。
2,文件路径:绝对路径,从根目录开始一级一级查找直到找到。
相对路径,在同一文件夹下直接写文件。
五种方式:
1,f.read,全部读出来。只读模式,可以不注明。默认就是只读模式。
f=open('yu.bak',encoding='utf-8')
2,f.readline,一行一行的读取。
3,f.readlines将原文件的每一行作为一个列表的元素读取。
4,f.read(n)在r模式下按照字符读取。n=(字符数)
在rb模式下read(n)按照字节读取。rb模式只读以bytes类型,非文字类的文件时用rb
5,循环读取。这种方式最好,占内存少。
f = open('yu','r',encoding='utf-8')
for i in f:
print(i.strip())
f.close()
写:w,write写模式
f = open('bk',encoding='utf-8',mode='w')
f.write('常常激励自己')
f.close()
w 写模式,没有文件时创建一个文件写入内容,有文件,将原文件内容清空,再写入内容。
#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
f=open('yu.bak',mode='rb')
s= f.read(6)
print(s)
f.close()#b'alex\xe6\x98'
wb
f = open('yu',mode='wb')
f.write('李海娜'.encode('utf-8'))
f.close()
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3,‘+’模式(就是增加了一个功能)
r+, 读写【可读,可写】
w+,写读【可写,可读】
a+, 写读【可写,可读】 #4,以bytes类型操作的读写,写读,写读模式
r+b, 读写【可读,可写】
w+b,写读【可写,可读】
a+b, 写读【可写,可读】
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。
f = open('yu','r+',encoding='utf-8')
s = f.truncate(4)
print(s)
f.close()
2,文件的修改
# ① 创建一个新的文件
# ② 读取一个原文件
# ③ 将原文件的内容通过你想要的方式进行更改并写入新文件
# ④ 将原文件删除
# ⑤ 将新文件重命名
with 语句:
1,功能一自动关闭文件句柄。2,一次性操作多个文件 。
# import os
# with open('yu',encoding='utf-8')as f1,\
# open('yu.bak',encoding='utf',mode='w')as f2:
# content = f1.read()
# new_content = content.replace('SB','alex')
# f2.write(new_content)
# os.remove('yu')
#os.rename('yu.bak','yu')
1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
li = []
name_list = ['name','price','amount','year']
with open('a.txt',encoding='utf')as f1:
for i in f1:
l2 = i.strip().split()
dic = {}
for j in range(len(l2)):
dic[name_list[j]] = l2[j]
li.append(dic)
print(li)
sum = 0
for i in li:
sum1 = int(i['price'])*int(i['amount'])
sum += sum1
print(sum)
2,有如下文件:
-------
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
----------
将文件中所有的alex都替换成大写的SB。
import os
with open('a1.txt',encoding='utf-8')as f1,\
open('a.txt',encoding='utf-8',mode='w')as f2:
for i in f1:
new_i = i.replace('alex','SB')
f2.write(new_i)
os.remove('a1.txt')
os.rename('a1.txt','a.txt')
python 的基础学习 第九天 文件的操作的更多相关文章
- Python入门基础学习 一
Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- Python入门基础学习 二
Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...
- Python 中当前位置以及目录文件遍历操作
Python 中当前位置以及目录文件遍历操作 当前位置 print(os.path.dirname(__file__)) 其中 dirname 会选择目录(文件夹),"__file__&qu ...
- Python入门基础学习(文件与异常处理)
Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...
- 跨语言学习的基本思路及python的基础学习
笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...
- python函数基础学习
函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...
- Python入门基础学习(时间模块,随机模块)
Python基础学习笔记(六) time模块: 时间的三种表示方法: 1.格式化字符串 2.时间戳 用来表示和1970年的时间间隔,单位为s 3.元组 struct_time 9个元素 time的st ...
- Python入门基础学习(模块,包)
Python基础学习笔记(五) 模块的概念:模块是python程序架构的一个核心概念 每个以拓展名py结尾的python源代码文件都是一个模块 模块名同样也是一个标识符,需要符合标识符的命名规则 在模 ...
随机推荐
- JavaScript(JS)之Javascript对象DOM(五)
https://www.cnblogs.com/haiyan123/p/7653032.html 一.JS中for循环遍历测试 for循环遍历有两种 第一种:是有条件的那种,例如 for(var ...
- Unable to load script from assets 'index.android.bundle'.make sure you bundle is packaged correctly
解决此问题 以下方法每次都需要执行命令2才能更新 1.创建assets目录 mkdir android/app/src/main/assets 2.执行命令 react-native bundle - ...
- 关于MySQL索引的最左前缀匹配原则原理说明说明
假设有2个这样的SQL SELECT * FROM table WHERE a = 1 AND c = 3; // c不走索引 SELECT * FROM table WHERE a = 1 AND ...
- TreeView CheckBox勾选联动
http://www.cnblogs.com/excellently/p/TreeViewCheckBox.html 在C# Winform项目中用到了TreeView控件,并且需要勾选的功能.父子节 ...
- linux提取第一列且删除第一行(awk函数)
如下文件所示,只想提取红框中的内容,即进行提取第一列,且去除第一行的操作 则用到下列命令行: awk 'NR == 1 {next} {print $1}' file.txt > file_co ...
- JS事件(三)部分常用事件
1.滚动条事件scroll EventUtil.addHandler(window,"scroll",function(event){ if(document.compatMode ...
- HTML学习笔记Day11
一.CSS文档统筹 (一)网页自身的优化 (二)CSS规范 1.命名方法(语义化命名,结构化命名) ID:结构化 header footer class: .border0 . red: ...
- NandFlash学习
目录 NandFlash学习 概述 原理图(K9F2G08U0C) 启动的引脚配置 命令概述 操作概述 Uboot下操作体验 ID与地址编码 时序初始化 程序设计 忙判断 基本操作 读NAND 擦除 ...
- JAVA核心技术I---JAVA基础知识(数字相关类)
一:相关数字类 –整数 Short, Int, Long –浮点数 Float, Double –大数类 BigInteger(大整数), BigDecimal(大浮点数) –随机数类 Random ...
- 关于Mysql的高级查询的操作
前言:作为一名后端的程序员操作数据库的能力是我们基本的技能,而连表查询是我们的这个技能的关键点所在.注意这里顾明思义是对数据的查询的操作 (一).联合查询(关键字union/union all) 什么 ...