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源代码文件都是一个模块 模块名同样也是一个标识符,需要符合标识符的命名规则 在模 ...
随机推荐
- JS 判断各种设备,各种浏览器
话不多说,直接看代码 1.区分Android.iphone.ipad: var ua = navigator.userAgent.toLowerCase(); if (/android|adr/gi. ...
- Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)
ASCII(American Standard Code for Information Interchange):早期它使用7 bits来表示一个字符,总共表示27 = 128个字符:后来扩展到8 ...
- Spring 学习笔记一
1.IOC,DI. 2.装配bean基于xml(实例化,声明周期,后处理bean,属性注入).3.装配bean基于注解 1 spring框架概述 1.1 什么是spring l Sp ...
- unittest的使用二——生成基于html的测试报告
mac下的安装: 1.下载HTMLTestRunner.py文件,下载地址http://tungwaiyip.info/software/HTMLTestRunner.html,可以复制里面的内容到一 ...
- c#中内置委托
一.Action泛型委托 和之前委托最大区别在于不用定义委托,直接实例化委托(申明就可以),泛型其实就是选择数据类型,进行使得程序更加安全,并且也实现了委托的重载,最多选择16个参数. namespa ...
- cookie猜数字游戏(下)------------以及cookie使用的不安全之处
1.通过cookie可以解决上篇中多个用户对数据的修改,每个COOKIE保存不同用户的数据 <?php if(empty($_COOKIE['num'])||empty($_GET['num'] ...
- 2017-12-15python全栈9期第二天第七节之布尔值转数字
#!/user/bin/python# -*- coding:utf-8 -*-print(int(True))print(int(False))
- busybox(一)浅析
目录 busybox(一)浅析 引入 读取inittab 创建执行脚本链表 执行脚本 小结 title: busybox(一)浅析 tag: arm date: 2018-11-13 23:02:33 ...
- 7、JPA-映射-双向一对多
一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe; import javax.persisten ...
- Dubbo服务启动脚本
## /usr/wangfajun/service/user #!/bin/sh ## java env export JAVA_HOME=/usr/java/jdk1..0_79 export JR ...