day3之文件操作
一,文件操作基本流程。
# 1.打开文件,产生文件句柄
# 2.操作文件句柄
# 3.关闭文件句柄
# f1 = open('11.txt',encoding='utf-8', mode='r')
# content = f1.read()
# print(content)
# f1.close()
# f1, 文件句柄,文件对象
# 约定俗称: file, f_handle ,file_handle, f_obj ,f1
# open 打开的指令,windows的指令
关闭文件的注意事项:
打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
1、f.close() #回收操作系统级打开的文件
2、del f #回收应用程序级的变量 其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close() 虽然我这么说,但是很多同学还是会很不要脸地忘记f.close(),对于这些不长脑子的同学,我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文
with open('a.txt','w') as f:
pass with open('a.txt','r') as read_f,open('b.txt','w') as write_f:
data=read_f.read()
write_f.write(data)
二,文件编码
f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了
# windows默认编码方式是gbk, linux默认编码方式是utf-8,mac:utf-8
# f1 = open('11.txt', mode='rb')
# content = f1.read()
# print(content)
# f1.close()
# b 模式无需定义编码,主要用于非文字类的文件操作,比如图片,视频
# r rb r+ r+b
# w wb w+ w+b
# a ab a+ a+b
三,文件读的几种模式
#1. read 全部读出来
# f1 = open('11.txt', mode='r', encoding='utf-8')
# print(f1.read())
# f1.close() #1.1 read[n] 指定读取
# f1 = open('11.txt', mode='r',encoding='utf-8')
# print(f1.read(12)) #r模式是按照字符去读
# f1.close() # f1 = open('11.txt', mode='rb')
# print(f1.read(16)) #rb模式是按照字节去读
# f1.close() #2. readline 按行读取
'''
def readline(self, limit=-1):
"""Read and return one line from the stream. :type limit: numbers.Integral
:rtype: bytes
"""
return b''
'''
# f1 = open('11.txt', mode='r',encoding='utf-8')
# print(f1.readline())
# print(f1.readline())
# f1.close() #3. readlines
'''
def readlines(self, hint=-1):
"""Read and return a list of lines from the stream. :type hint: numbers.Integral
:rtype: list[unicode]
"""
return []
''' #4. for循环 最后读取大文件的方式,只占一行的内存
# f1 = open('11.txt', 'r', encoding='utf-8')
# for n in f1:
# print(n)
read(3): 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+等模式下测试效果。
# seek() tell()
# seek(0,2) 指针调到最后
# tell() 告诉指针位置
# f1 = open('11.txt', 'r', encoding='utf-8')
# f1.seek(0,2)
# print(f1.read())
四、文件的修改
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,
方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的
方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件
#1. 打开文件产生文件句柄
#2. 创建新文件产生文件句柄
#3. 读取源文件,进行修改,写入新文件
#4. 将源文件删除
#5. 将文件命名源文件
import os
# low版
# with open('11.txt', 'r', encoding='utf-8') as f1,\
# open('11.bak', 'w', encoding='utf-8') as f2:
# old_content = f1.read()
# new_content = old_content.replace('我爱你', '我擦了')
# f2.write(new_content)
# os.remove('11.txt')
# os.rename('11.bak', '11.txt') #for循环版
# with open('11.txt', 'r', encoding='utf-8') as f1,\
# open('11.bak', 'w', encoding='utf-8') as f2:
# for line in f1:
# new_content = line.replace('我擦了', '我爱你')
# f2.write(new_content)
# os.remove('11.txt')
# os.rename('11.bak', '11.txt')
五、练习
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}......] 并计算出总价钱。
# l1 = []
# sum = 0
# with open('a.txt', 'r', encoding='utf-8') as f1:
# for n in f1:
# n = n.split()
# if n:
# sum += int(n[1]) * int(n[2])
# l1.append({"name": n[0], "price": n[1], "amount": n[1]})
# print(sum)
# print(l1)
2,有如下文件:
-------
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
----------
将文件中所有的alex都替换成大写的SB。
day3之文件操作的更多相关文章
- 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...
- Python——Day3知识点——文件操作
一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ...
- GO语言的进阶之路-Golang字符串处理以及文件操作
GO语言的进阶之路-Golang字符串处理以及文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道Golang是一门强类型的语言,相比Python在处理一些并发问题也 ...
- Golang字符串处理以及文件操作
一.整数 1.int与uint的初值比较以及其大小. 1 /* 2 #!/usr/bin/env gorun 3 @author :xxxx 4 Blog:http://www.cnblogs.com ...
- Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法
知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...
- Day3 文件操作和函数
一 文件操作 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1.1打开文件读取内容 print(open("sounds","r", ...
- Day3 Python基础学习——文件操作、函数
一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...
- Python-字典、集合、字符编码、文件操作整理-Day3
1.字典 1.1.为什么有字典: 有个需求,存所有人的信息 这时候列表就不能轻易的表示完全names = ['stone','liang'] 1.2.元组: 定义符号()t = (1,2,3)tupl ...
- day3 文件操作
文件操作是在内存中进行操作的,因为文件是存储在内存中的. open函数,该函数用于文件处理: 操作文件时,一般需要经历如下步骤: (1)打开文件: (2)操作文件 一.打开文件 文件句柄 = open ...
随机推荐
- java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- eclispse修改项目项目编码
最近遇到问题,在myeclipse新建或导入项目后,有些文件中文显示乱码,每次都要在项目property中修改其编码,所以想到一次性解决所有编码问题,让项目新建或导入之后自动是utf-8编码,这样就不 ...
- java作用域public ,private ,protected 及不写时的区别
说明部分转自:http://yangmingjiayou.iteye.com/blog/151865 在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,ba ...
- CSS3 弹性盒模型 box-flex
说明:本文档兼容性测试基础环境为:windows系统:IE6-IE10, Firefox6.0, Chrome13.0, Safari5.1, Opera11.51 语法: box-flex:< ...
- PCA和SVD(转)
最近突然看到一个问题,PCA和SVD有什么关系?隐约记得自己照猫画虎实现的时候PCA的时候明明用到了SVD啊,但SVD(奇异值分解)和PCA的(特征值分解)貌似差得相当远,由此钻下去搜集了一些资料,把 ...
- intellij idea 的安装与简单使用
1.将安装包拷贝到指定目录,特别注意不要有中文路径和空格,路径不要太深 2.点击安装(如果是win10系统要使用管理员权限安装) 3. 4.修改默认安装目录:一般来说我们都不要把软件安装在 ...
- Subquery typo with using in(转)
Subquery typo with using in Do you use the following syntax? SELECT * FROM TABLE WHERE COLUMN IN ( ...
- Path-O-LOGIC Keynote
[Path-O-LOGIC Keynote] 1. OnSpawned()OnSpawned(SpawnPool pool) 2. OnDespawned()OnDespawned(SpawnPool ...
- WebDriverException:Element is not clickable at point - selenium执行过程中遇到的相关报错
Element is not clickable at point (x, y) 这段可以忽略:本文来自 https://www.cnblogs.com/lozz/p/9947430.html 引起这 ...
- openresty + luajit
https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/brief.html ftp://ftp.csx.cam.a ...