一、文件的操作

文件句柄 = open('文件路径+文件名', '模式')

例子

f = open("test.txt","r",encoding = “utf-8”)

分析:这里由于python文件和test.txt文件在同一文件夹里,不需要写test的绝对路径

如果要写绝对路径可以这样写

f = open(file = "d:/python/test.txt","r",encoding = “utf-8”)

文件打开模式有以下几种模式

1、文本文件的打开模式

“r” ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

“w”, 只写模式【不可读;不存在则创建;存在则清空内容】

"a",只追加写模式【不可读;不存在则创建;存在则只追加内容】

就是以二进制的方式打开文件,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

"+" 表示可以同时读写某个文件

"r+",读写【可读,可写】

"w+",写读【可读,可写】

"a+",写读【可读,可写】

2、readable()、writable()

readable()判断文件是否可读,返回True或者False,

writable()判断文件是否可写,返回True或者False,

例子

f.readable()

f.writable()

3、read()、readline() 、readlines()

f.read() #读取所有内容,光标移动到文件末尾

字符串的形式返回结果,read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止

f.readline() #读取一行内容,光标移动到第二行首部

以字符串的形式返回结果

f.readlines() #读取每一行内容,存放于列表中

读取文本所有内容,将每一行作为一个列表的元素,并且以列表的格式返回结果,但读取大文件会比较占内存。

4、write()、writelines( )

write()要写入字符串

writelines()既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件。 注意必须传入的是字符序列,不能是数字序列。

f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符

f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符

f.writelines(['333\n','444\n']) #文件模式

f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

5、f.close() #关闭文件f.closed()#查看文件是否关闭

用open方法打开文件后,必须用f.close()关闭文件

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

f.closed()#查看文件是否关闭,返回True或者False

6、with open as f打开方法

这种打开文件的方式不用写f.closed关闭文件

例子

with open('/path/to/file', 'r') as f:

with open("test.txt","r",encoding = “utf-8”) as f:

7、 对于非文本文件,我们只能使用b模式

非文本文件的打开模式,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式,b模式可以跨平台使用)

"rb"

"wb"

"ab"

f = open("test.py","rb")

分析:注意这里不能在加,encoding = “utf-8”,因为这里是以二进制的方式打开,不需要再设置打开的编码方式

例子

f = open("test.py","rb")

data = f.read()

print(data)

test.py文件内容:

输出

b'"111"\r\n"2222"\r\n"3333"\r\n\xe4\xbd\xa0\xe5\xa5\xbd'

分析:这里的\r\n是Windows平台的换行,以b开头代表输出的是字节形式

这里的\xe4\xbd\xa0\xe5\xa5\xbd'代表汉字

f = open("test.py","rb")

data = f.read()

print(data.decode("utf-8"))

输出结果

"111"

"2222"

"3333"

你好

分析:这里在test.py文件存储时用的是utf-8存储的,在打印输出的时候以"utf-8"进行解码即可输出结果。

以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

例子2

f = open("test11.py","wb")f.write("111\n")

f.close()

输出结果:出错,提示这里需要字节,而不是字符串形式,这里写入必须以字节形式写入

可改为

f = open("test11.py","wb")

f.write(bytes("111\n",encoding="utf-8"))

f.close()

分析:这里就可以把字符串“111\n”写入文件了,这里bytes()一定要指定一个编码。

或者直接对字符串进行编码,不用bytes()方法

f = open("test11.py","wb")

f.write("222\n".encode("utf-8"))

f.close()

8、f.encoding

取文件打开的编码

例子

f = open("test11.py","w",encoding="gbk")

f.write("222\n")

f.close()

print(f.encoding)

输出

gbk

分析:这里取的是文件打开的编码,即open语句里的编码,与源文件实际的编码无关。

9、f.flush() 、f.tell()

f.flush() 立刻将文件内容从内存刷到硬盘,这里需要用命令提示行操作,在pycharm里会直接将写入内容写入硬盘,不需要flush()

f.tell()获取当前光标所在的位置

10、文件内光标移动

read(3):

a、文件打开方式为文本模式时,代表读取3个字符

b、文件打开方式为b模式时,代表读取3个字节

read()默认读取整个文件

其余的文件内光标移动都是以字节为单位如seek,tell,truncate

例子

test.txt文件内容

f = open("test.txt","rb")

data = f.read(6)

f.close()

print(data)

输出结果

b'111\r\n2'

分析:这里的111算3个字节,\r\n算2个字节,2算1个字节,这里是b模式,以字节进行计算,这里不能指定编码即不能写encoding = "xx",否则会报错

例子2

文件内容与上面相同

f = open("test.txt","r+",encoding="utf-8")

data = f.read(6)

f.close()

print(data)

输出结果

111

22

分析:这是文本模式,这里的111算3个字符,换行符\r\n算一个字符,22算2个字符,共计6个字符。

11、seek()

seek()移动文件光标到到指定位置。

seek()语法

f.seek(offset[, whence])

offset即移动多少个字节数,whence有0,1,2三种模式,0 代表文件开始算, 1 代表当前位置开始算, 2 代表文件末尾开始算,默认是0。其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的,Widnows 系统下的换行代表2个字节大小(\r\n)。

例子

test.txt文件内容

f = open("test.txt","r+",encoding="utf-8")

f.seek(3,0)

data = f.read()

f.close()

print(data)

输出结果

222

333

你好

444

aaa

bbb

ccc

555

例子2

文件内容与上面相同

f = open("test.txt","rb")

f.seek(5)

f.seek(11,1)

print(f.tell())

data = f.read()

f.close()

print(data)

输出结果

16

b'\xbd\xa0\xe5\xa5\xbd\r\n444\r\naaa\r\nbbb\r\nccc\r\n555'

分析

这里是以二进制打开的,111算3个字节,后面有个看不见的\r\n换行符,因此,seek(5)的位置就是第一行的最后

seek(11,1)是从当前位置继续移动光标,即222\r\n算5个字节,同理333\r\n算5个字节,“你好”(文本文件是utf-8编码的)算6个字节,因此这时只取“你”这个字的3个字节的第一个字节,光标移动到你的第一个字节之后,所以最后输出了\xbd\xa0\xe5\xa5\xbd共5个字节。

注意这里的光标操作要用seek()方法,直接用鼠标移动光标是无效的。

例子3

文件内容

f = open("test.txt","rb")

offs = -20

while True:

f.seek(offs,2)

data = f.readlines()

if len(data) > 1:

print("文件的最后一行是%s"%data[-1].decode("utf-8"))

breakf = open("test.txt","rb")

offs = -20

while True:

f.seek(offs,2)

data = f.readlines()

if len(data) > 1:

print("文件的最后一行是%s"%data[-1].decode("utf-8"))

break

这里目的是在不知道一行是多少字节的情况下输入最后一行

输出结果

文件的最后一行是2018-04-15 nicholas 学习了520分钟

分析:seek(-20,2)是从文件的最后开始计算的,必须以b模式进行。

12、 truncate()

truncate()方法用于从文件的首行首字节开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;截断后面的所有字节被删除,其中 Widnows 系统下的换行代表2个字节大小。

例子

文件内容

f = open("test.txt","r+")

f.truncate(10)

data = f.read()

print(data)

输出结果

111

aaa

分析:这里是以字节进行计算的,111算3个字节,后面的换行符算2个字节,所以这里截取了111aaa和之后的2个换行符,共计10个字节。

python 文件夹操作_Python之路(第九篇)Python文件操作相关推荐

  1. Python之路(第九篇)Python文件操作

    一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r",encoding = &quo ...

  2. python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...

    一般在写一个项目的时候, 为了将项目模块化, 更加的清晰明了, 会将不同功能的模块放入不同的文件夹 项目如下: ├── spider│   └── spider.py # 爬虫文件└── utils├ ...

  3. Python操作FTP服务器实现文件和文件夹的上传与下载,python清理ftp目录下的所有文件和非空文件夹

    Python 连接 FTP 服务器并实现文件夹上传实例演示 第一章:连接 FTP 服务器并实现文件夹上传 ① 连接 FTP 服务器 ② 区分文件和文件夹名 ③ 文件夹名包含空格处理 ④ 使用递归实现: ...

  4. python 复制文件夹校验_Python多任务复制文件夹

    import multiprocessing import os import time def copy_file(queue, file_name, old_folder_name, new_fo ...

  5. Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作

    ** Java中 实现通过文件夹选择任一图像,从而进行图像卷积操作 ** 之前的那篇关于图像卷积的博客(Java中实现图像的卷积效果),只是讲了给定一张图片,从而实现图片的卷积操作:而现在,需要去实现 ...

  6. Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略

    Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...

  7. 服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作...

    有时候我们在删除一些系统重要文件,或者被保护的文件的时候,会出现对话框,提示我们您需要来自administrator权限才能对此文件夹进行更改,这是什么原因导致的?今天小编就为大家分析下解决办法. 方 ...

  8. python跨文件调用函数_python如何调用另一个py文件的所有函数?

    展开全部 在同一个2113文件夹下 调用5261函数: A.py文件: B.py文件: 或 调用类: A.py文件: B.py文件: 或 在不同文4102件夹下 A.py文件的文件路径:E:\Pyth ...

  9. 删除计算机用户时拒绝访问权限,Win7系统删除提示文件夹访问被拒绝,您需要权限来执行操作解决方法...

    众所周知,电脑使用时间长了就会产生众多垃圾文件夹以及临时文件,我们可能会尝试着删除这些文件夹或者文件,但是在删除的过程中,系统删除提示"文件夹访问被拒绝,您需要权限来执行操作",那 ...

  10. 哔哩哔哩服务器在哪个文件夹,哔哩哔哩缓存在哪个文件夹 具体操作步骤

    我们在手机b站中缓存了视频,如果想要找到源文件,就必须要在手机的内部存储中去寻找,实际上,手机b站缓存的视频隐藏的很深,其查看路径为:文件管理/本地/内部存储/android/data/tv.danm ...

最新文章

  1. 【数学基础】校招算法工程师笔试题
  2. django之全文检索
  3. HDU - 2825 Wireless Password (AC自动机 + 状压dp)
  4. mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...
  5. 【转】UINavigationBar 使用总结
  6. Spring 4 官方文档学习 Spring与Java EE技术的集成
  7. 分页缓冲池内存过高_揭秘:为什么新买的8G内存却显示4G可用,是系统出错还是被人坑了?...
  8. windows服务器性能监控工具、方法及关键指标
  9. reset.css下载
  10. 【图像去噪】基于BM3D算法实现图像去噪含Matlab源码
  11. pgsql之Comment命令
  12. MySQL的用户密码过期password_expired功能
  13. VPP GTP-U隧道性能测试3---GTP-U封包性能测试
  14. linux终端关闭xmanager,xmanager功能和设置
  15. WiFi_Display_Spec
  16. 对resultMap中column的理解
  17. java compare 和equals,java-在此示例中compareTo和equals方法如何工作?
  18. mpvue 如何使用腾讯视频插件?
  19. Python 网络爬虫基础知识及体验
  20. GL-HOOK-ERR: 本项目开启了commitlint检查,您的提交不符合规范,具体规则可以查看:http://commitlint.js.org/

热门文章

  1. IDEA打包jar包及运行jar包命令
  2. 让你的手机不输kindle的3款epub阅读器
  3. .net DLL反编译文件
  4. Oracle数据库进行简单优化,Oracle数据库性能优化
  5. JAVA学习——GUI鼠标画图交互练习
  6. oracle自我评价简历,程序员简历自我评价
  7. 舞台音效控制软件_舞台音乐控制软件下载
  8. 极域课堂管理系统软件如何取消控制_极域新品发布会圆满落幕,你想看的都在这里...
  9. python遍历json数据方法
  10. matlab数据类型 —— 整型