11 python初学 (文件)
对文件的操作分为 3 步:
- 打开文件;
f = open('望月怀古', 'r', encoding='utf8') # 路径可以写绝对路径,也可以写相对路径;
- 操作
- 关闭文件; f.close()
with 方式打开文件:使用 with 语句,当 with 代码块执行完毕之后,内部会自动关闭并释放文件资源。这样可避免打开文件后忘记关闭。
在 python 2.7 后,with 又支持对多个文件进行上下文管理。
with open('望月怀古', 'r', encoding='utf8') as f:
print(f.readline())
with open('望月怀古', 'r', encoding='utf8') as f1, open('望月怀古1', 'w', encoding='utf8') as f2:
pass
只读模式:r
f = open('望月怀古', 'r', encoding='utf8')
data = f.read(5) # 读取 5 个字符: 1 个汉字和 1 个 英文字母都算是 1 个字符
print(data)
f.close()
写模式:w。
# w:写操作。 在 f 对象被创建的时候就会将原来的文件清空,重新写操作。
# 如果没有该文件,则先会自动创建一个,在进行写入
f = open('望月怀古1', 'w', encoding='utf8')
f.write('望月怀古')
f.write(' 张九龄') # 会紧跟在上一句之后写入。
f.close()
在文件后继续添加:a
# a:append 直接在文件后面追加
f = open('望月怀古1', 'a', encoding='utf8')
print(f.fileno()) # 打印文件句柄
f.write('\nHello world')
f.close()
文件操作方法:
1. readline()
如果想要读取文件某一行的内容(如第五行),使用 linecache
linecache是专门支持读取大文件,而且支持行式读取的函数库。 linecache预先把文件读入缓存起来,后面如果你访问该文件的话就不再从硬盘读取
import linecache
str = linecache.getline(filename,linenum)
# 读取一行数据。 读取一行后,光标移动了,如果文件没有被关闭,下次会从光标处继续读
f = open('望月怀古', 'r', encoding='utf8')
f.readline()
2. readlines()
a. 可以通过 count = len(f.readlines) 来计算文件行数。但是对于大型文件不适用
b. 大型文件:使用循环处理。 for i in f: count += 1
c.str = linecache.getlines(filename) str为列表形式,每一行为列表中的一个元素
print(f.readlines()) # 读取所有行,放进一个列表中输出 # readlines 读取出来的列表会被放进内存中进行保存,因此当文件很大时并不建议使用此方法。使用 for i in f,即可对每一行做输出
f = open('望月怀古', 'r', encoding='utf8')
# for i in f.readlines(): 不建议使用
for i in f:
print(i.strip())
f.close()
3. tell() :得到当前光标位置
f = open('望月怀古', 'r', encoding='utf8')
print(f.tell())
f.read(7)
print(f.tell()) >>> 0
>>> 7 # 如果是英文字符,则读取 7 个后,当前光标位置是 7
# 如果是中文字符,读取 7 个后,当前光标位置是 21.因为一个中文占 3 个字符
4. seek():调节当前光标位置
#hello world
#
f = open('望月怀古', 'r', encoding='utf8')
print(f.tell())
print(f.read(7))
print(f.tell()) f.seek(0) # 调节当前光标位置到0,从当前位置开始打印
print(f.read(4)) >>> 0
>>> hello w
>>> 7
>>> hell # 又从光标 0 的地方开始输出
5. flush() :把缓存里的数据保存到磁盘里区
f.flush()
# flush 立即刷新写入。此段代码运行结果就是每隔 1 秒钟输出一个 * ,一共输出 10 个
import sys
import time
for i in range(10):
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(1)
6.truncate():从某个字符处开始截断,将后面内容全部删除。
f = open('望月怀古1', 'a', encoding='utf8')
f.truncate(7)
f.close()
>>> hello w
7. fileno():得到文件描述符,返回一个整数。唯一的代表一个文件
8. f.isatty(): 判断是不是终端
9. f.readable(): 判断文件是不是可读的
10 . r+、 w+、 a+
# r+:即可读,又可以写的模式,是在 r 的基础上延伸出来的。1. 不会清空文件;2. 写的时候会在文件最后写
# w+:既可读又可写,是在 w 的基础上延伸出来的。1. 会清空文件 2. 写入之后光标会移动到当前写入字符后,再读取就没有内容,如果需要读取写入内容,就需要调节光标位置
# a+:既可读又可写,是在 a 的基础上延伸出来的。1. 不会清空文件 2. 光标初始默认定位在文件最后,因此需要读取时需要先调节光标位置 3. 写入时不论当前光标位置如何,都会在最后添加。
# r+:
f = open("望月怀古1", 'r+', encoding='utf8')
print(f.readline())
f.write("love you")
f.close() #w+:
f = open("望月怀古1", 'w+', encoding='utf8')
print(f.readline())
f.write("i love you")
print(f.tell())
f.seek(0)
print(f.readline())
f.close()
#a+:
f = open("望月怀古1", 'a+', encoding='utf8')
f.seek(4)
print(f.readline())
f.write("12345")
f.close()
# 实现将 望月怀古 第 2 行后添加字符串 “lily”
# 实现1: 此种实现的问题是,以为光标在第 2 行后面,就可以添加到正确的位置了。但是其实会添加到最后,因为就是这样的机制。
f = open("望月怀古", "r+", encoding='utf-8')
count = 0
for line in f:
count += 1
if count == 2:
f.write("lily")
f.close()
eval 函数:将字符串变回数据类型
11 python初学 (文件)的更多相关文章
- python初学--文件操作、字典
文件读写 1.先打开文件 2.读取/写入内容 3.保存文件 文件的open模式有三种 1.w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空 ...
- 11. python读写文件的多种方式
一.txt文件 with open('users.txt','r') as user_file: data = user_file.readlines() users = [] for line in ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...
- python 读写文件和设置文件的字符编码
一. python打开文件代码如下: f = open("d:\test.txt", "w") 说明:第一个参数是文件名称,包括路径:第二个参数是打开的模式mo ...
- Python初学笔记
一.安装:直接通过软件管理程序,搜索Python,安装:安装过程中自定义路径,有个选项类似“add Python3.5 to Path”,勾选后便可以在cmd命令窗口,通过输入Python,启动Pyt ...
- Python的文件与文件夹操作
Python的文件与文件夹操作 Python OS模块 1.重命名:os.rename(old, new) 2.删除:os.remove(file) 3.列出目录下的文件 :os.listdir(pa ...
- Python 读写文件操作
python进行文件读写的函数是open或file file_handler = open(filename,,mode) Table mode 模式 描述 r 以读方式打开文件,可读取文件信息. w ...
- Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- python之文件的读写和文件目录以及文件夹的操作实现代码
这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...
随机推荐
- Ansible playbook roles
1 概述 角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的 ...
- CSS笔记1:属性--定位
相对定位是“相对于”元素在文档中的初始位置,而绝对定位是“相对于”最近的已定位祖先元素,如果不存在已定位的祖先元素,那么“相对于”最初的包含块. 元素定位 属性 版本 继承 描述 position c ...
- vue2 切换路由时 页面滚动到顶部 用游览器返回时 记住上页的位置
官方用例:https://router.vuejs.org/zh-cn/advanced/scroll-behavior.html import Vue from 'vue' import Route ...
- [DOM基础]offsetHeight,clientHeight,scrollHeight,innerHeight,outerHeight等属性的解释
由于经常搞混这几个属性,所以查找资料总结一下,方便以后翻出来温习. 一.偏移量-以offset开头的 1.offsetHeight:元素在垂直方向上占用的空间大小,像素.包括元素的高度.可见的水平滚动 ...
- Django之Ajax文件上传
请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有3种: 1 application/x-www-form-urlencoded(看下图) 这应该是最常见的 P ...
- Spring学习之旅(六)Spring AOP工作原理初探
AOP(Aspect-Oriented Programming,面向切面编程)是Spring提供的关键技术之一. AOP基于IoC,是对OOP(Object-Oriented Programming ...
- Pycharm启动后加载anaconda一直updating indices造成Pycharm闪退甚至电脑崩溃
可能跟anaconda文件夹有一定关系 网上找找解决方案,似乎很多人有同样的困扰! 知乎-pycharm启动后总是不停的updating indices...indexing? stackoverfl ...
- Ubuntu16.04下postgresql-10
这里使用源码安装的方式进行: Linux版本:ubuntu16.04 PostgresSQL版本:postgresql-10.3 在PostgreSQL官网下载地址:https://www.pos ...
- matlab练习程序(局部加权线性回归)
通常我们使用的最小二乘都需要预先设定一个模型,然后通过最小二乘方法解出模型的系数. 而大多数情况是我们是不知道这个模型的,比如这篇博客中z=ax^2+by^2+cxy+dx+ey+f 这样的模型. 局 ...
- 「客户成功故事」OneAPM 助力网上办事大厅构建阳光、高效、安全的政务服务平台
(一) 项目背景: 网上办事大厅是由省信息中心承建的电子政务核心业务系统,致力于为全省民众提供一站式网上办事服务,实现了政务信息网上公开.法人及个人事项网上办理.公共决策网上互动.政府效能网上监督五大 ...