文件操作,通常是打开,读,写,追加等。主要涉及 编码 的问题。

#!/usr/bin/env python
# coding:utf-8 ## open实际上是从OS请求,得到文件句柄
f = open('test', encoding='utf-8') # 打开文件,并且使用指定编码
data = f.read() # 读文件
f.close() # 使用完成要记得释放资源
print(data) f2 = open('t2') # 默认以GBK编码读取,所以需要文件也是以同样的编码保存
print(f2.readable()) # 是否可读
d2 = f2.readline() # 一次读一行,会包括末尾的换行符
print(d2,type(d2))
print(f2.readline())
print(f2.readlines()) #从光标处开始,读取全部至末尾的行,以list的形式
f2.close() ## 文件打开模式: 基本,只读,只写
# 默认是只读模式,
'''
#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3. 了解部分
"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
a+, 写读【可读,可写】 x, 只写模式【不可读;不存在则创建,存在则报错】
x+ ,写读【可读,可写】
xb 更多可参考: http://www.cnblogs.com/linhaifeng/articles/5984922.html#_label2
'''
f = open('测试.txt','w',encoding='utf-8')
# f.read() # 只写的文件不可读
print(f.writable()) # 判断是否可写
f.write('1111111111111\n') # 默认会文件内容清空,再写。
f.write('222\n')
f.write('3333333\n') f.writelines(['aaaaaaaa\n','bbbbbb\n']) # 以列表的方式写入,且只能是字符串内容。
f.close() fo = open('测试.txt','a',encoding='utf-8') #
fo.write('kkkkkkkk\nbbbbbb\n大家都来测试吧。')
# print(fo.read()) # 不可读
fo.close()

使用 with 关键字,open的写法不同。

#!/usr/bin/env python
# coding:utf-8 # 使用 with关键字,则打开的文件不用手动关闭,python会自动释放资源 with open('t3','r',encoding='utf-8') as f:
a = f.read()
print(a) # 也可以 with 打开多个文件,换行的话,以 \ 结尾
# 此例自动读取了一个文件,写入到另一个文件。且编码发生改变。
with open('t2','r',encoding='gbk') as f2, \
open('t4','w',encoding='utf-8') as f3:
data = f2.read()
f3.write(data)

一个小练习,模拟了文件修改的过程。

#!/usr/bin/env python
# coding:utf-8 # r+ 模式可读可写,并且容易操作,并且不会清空文件内容。
# fop = open('测试.txt','r+',encoding='utf-8')
# fop.write('9999999999') # 如果 r+ 方式一开始就写,那么会从文件头部开始写。
# c = fop.read()
# print(c)
#
# fop.write('\n\nggggggggggg')
# fop.close() ## 模拟文件的修改过程,即先将文件读入内存,经过程序修改后,再写入硬盘。 srf = open ('t3','r',encoding='utf-8')
da = srf.readlines()
srf.close() print(da)
lis =[]
for i in da:
a = i.replace('','')
lis.append(a) # print(list(lis))
#
dsf = open('t3','w',encoding='utf-8')
dsf.writelines(lis)
dsf.write('88888888888888\n')
dsf.close()

还有那个 seek() 用来操作光标:

#!/usr/bin/env python
# coding:utf-8 f = open('t5','a+',encoding='gbk')
print(f.encoding) # 得到的是打开文件时的编码,跟源文件编码无关
# print(f.read())
f.close() # 如果不关闭,文件则不能删除。 # r+ 模式要注意先读后写 与 先写后读的区别 因为光标所处的位置
fo = open('t6','r+',encoding='utf-8')
fo.write('11111\n')
fo.write('abcde\n')
fo.flush() # 将内存中的操作保存到硬盘
print(fo.name)
print(fo.readlines())
fo.close() fop = open('t6','r',encoding='utf-8',newline='') # newline参数表示不处理OS的特殊字符,原样输出真正的换行符号
print(fop.tell()) # 告诉你光标的位置 断点续传时需要监控光标位置
print(fop.readlines())
print(fop.tell())
fop.close() fope = open('t7','r',encoding='utf-8',newline='') # newline参数表示不处理OS的特殊字符,原样输出真正的换行符号
fope.seek(3) # 光标移动到多少字节,默认从头开始
print(fope.read())
fope.close() fopen = open('t8','r+',encoding='utf-8',newline='') # truncate是截取文件内容,不能以w 或w+ 来打开。
# fopen.seek(5)
fopen.truncate(15) ###### #######
# 文件操作,参考 : http://www.cnblogs.com/linhaifeng/articles/5984922.html#_label13

### seek()控制光标的位置。括号里面是按字节数来控制位置(utf8是3个字节) ### read() 括号里则是按字符数

#!/usr/bin/env python
# coding:utf-8 ### seek()控制光标的位置。括号里面是按字节数来控制位置(utf8是3个字节)
### read() 括号里则是按字符数
## 第二个参数:0 从头开始,1 相对位置开始,2 从末尾倒着来。
## 其中后两种模式只能以 b 方式打开文件
f = open('t8','ab+')
f.seek(0,2) # 直接从文件末尾开始
print(f.read())
f.seek(-2,2) # 从文件末尾往回两个字节
print(f.read())
f.seek(5,2) # 从文件末尾再往后5个字节
f.write('\n8888888'.encode('utf-8')) # 在文件的末尾添加内容 # ## 读取日志文件的最后一行。
with open('log','rb') as fop:
offs = -50
while True:
fop.seek(offs,2)
lis = fop.readlines() # 读取从光标处到末尾
if len(lis) > 1:
print(lis[-1].decode('utf-8'))
break
offs *= 2
#!/usr/bin/env python
# coding:utf-8 import time # b 以二进制字节方式打开文件。 byte
# 好处,是可以跨平台。但是对Linux没什么用,因为Linux本身就是以二进制方式打开文件。
# 可以打开视频 图片 等类型文件。 f = open('t5','rb') # b方式不能指定编码
# f.readable()
a = f.read()
print(a)
print(a.decode('utf-8'))
f.close() # fo = open('t5','wb')
# fo.write(bytes('abcdefg\n大家一起上吧。\n',encoding='utf-8')) # 使用内置bytes函数来转换
# fo.write('今天天气真热\n'.encode('utf-8')) # 直接用字符串的 encode 方法来编码
# fo.close() fo = open('t5','ab')
fo.write(bytes('abcdefg\n大家一起上吧。\n',encoding='utf-8')) # 使用内置bytes函数来转换
fo.write('今天天气真热\n'.encode('utf-8')) # 直接用字符串的 encode 方法来编码
fo.close() ## open 函数如果不传参数,默认以 rt 方式打开

python基础14_文件操作的更多相关文章

  1. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  2. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  3. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  4. 【python基础】文件操作

    文件操作目录 一 .文件操作 二 .打开文件的模式 三 .操作文件的方法 四 .文件内光标移动 五. 文件的修改 一.文件操作介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用pyt ...

  5. python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...

  6. Python基础 之 文件操作

    文件操作 一.路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二.编码方式 utf-8 gbk... 三.操作方式 1.只读 r 和 rb 绝对路径的打开操作 ...

  7. Python基础--基本文件操作

    全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...

  8. python基础(10):文件操作

    1. 初识文件操作 使⽤python来读写⽂件是非常简单的操作.我们使⽤open()函数来打开⼀个⽂件,获取到⽂ 件句柄,然后通过⽂件句柄就可以进⾏各种各样的操作了,根据打开⽅式的不同能够执⾏的操 作 ...

  9. Python基础学习——文件操作、函数

    一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...

随机推荐

  1. git 执行pull错误如何撤销

    比如你当前所在的空间是trunk,但是执行了git pull origin branches,这时需要回滚回去,可以用一下步骤: 1.运行git reflog命令查看你的历史变更记录,如下: 69fd ...

  2. [Linux]防火墙关闭与开启

    防火墙关闭与开启 系统环境:ubuntu16.04 工具:xshell 测试远程主机的端口是否开启 telnet 192.168.xx.xx 80 防火墙关闭/开启/重启 # 防火墙关闭 sudo u ...

  3. 《c++ concurrency in action》读书笔记2--线程管理

    一.线程的启动 1. 每个c++程序至少有一个线程,是由C++ runtime启动的 2. 在c++11中,通过一个std::thread 对象启动线程.可以向std::thread传递一个函数,或者 ...

  4. 【Java】【13】两个double类型比较大小

    /** * @return >0,第一位数大 */ public static int compare(double double1, double double2) { BigDecimal ...

  5. 修改 input / textarea placeholder 属性的颜色和字体大小

    话不多说,直接上代码: input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #666; fon ...

  6. h5软键盘弹起 底部按钮被顶起问题解决

    解决思路: 当键盘弹起时隐藏掉按钮,键盘隐藏时按钮显示 监测键盘是否弹起(浏览器页面是否发生变化) 代码: 1.定义一个底部按钮 <div class="returnbtn" ...

  7. LAMP环境配置安装注意安装步骤及说明事项

    一.安装gcc shell># yum -y install gcc 二.安装zlib压缩库 shell>## cd /home/hsk/tar shell># tar –zxvf ...

  8. linux逻辑卷管理(LVM)

    1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...

  9. .Net mvc 上传多文件

    .net mvc 上传多文件有很多种方式,我的方法只是其中一种, 仅供参考,我主要是注重参数传递的过程,后面文件保存的地方省略.. 调试环境 vs2017 控制器代码: [HttpPost] publ ...

  10. springcloud-spring cloud config统一配置中心

    统一配置中心 为什么需要统一配置中心? 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个 ...