文件相关操作

计算机系统分为:计算机硬件,操作系统,应用程序三部分。我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

【注】

# 在同一个文件夹下(‘zhouyuan’这个文件与‘文件处理.py'文件在同一处)直接可以open加文件名。【】

#Windows操作系统是gbk编码,而pycharm是默认utf-8编码,open函数解锁当前操作系统的编码,gbk不能解码utf-8编码的文件。

#在文件夹中编写文件pycharm是自动保存的。

#对于文件是可以在建立文件是修改它的编码方式的,例如,在pycharm的右下角,默认的utf-8编码改成与Windows一致的gbk编码,就可以不用encoding='utf-8' 修改解码方式与pycharm一致了。

#什么是句柄?类比于应用程序无法直接去操作硬盘上的数据,此时操作系统需要提供一个句柄,并复制给一个变量。

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

#关闭文件 f.close()

1 f=open('zhoutao',encoding='utf-8')
2 data=f.read()
3 print(data)
4 f.close()

#文件处理流程:

1 文件处理流程:
2  1.打开文件,得到文件句柄并赋值给一个变量
3  2. 通过句柄对文件进行操作
4  3. 关闭文件

#资源回收:
打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
1、f.close() #回收操作系统级打开的文件
2、del f #回收应用程序级的变量

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()

f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f=open('a.txt','r',encoding='utf-8')

【1】文件处理读操作 (read(),readline(),readable(),readlines()

 1 f=open('zhoutao',‘r’)
 2 # data=f.read()
 3 # print(data)
 4 print(f.readable())  #readable()是否可读,结果是True False
 5 print(f.readline())   #readline()读取一行
 6 print(f.readline())
 7 print(f.readline())
 8 f.close()
 9 #结果:True
10 #        周涛
11 #        zhou
12 #        yuan
13
14 f=open('zhoutao')
15 data=f.read()
16 print(data)
17 print(f.readable())
18 print(f.readline())   #最后游标已经到了最后一行,再readline已经没有结果
19 f.close()
20 #结果:周涛
21 #    zhou
22 #    yuan
23 #    涛
24 #    True
25
26 f=open('zhoutao')
27 data=f.readlines()  #readlines()每行作为一个字符串放入列表中
28 print(data)
29 f.close()
30 #结果:['周涛\n', 'zhou\n', 'yuan\n', '涛']

【2】文件处理写操作(write(),writelines())(标明是'w'写模式,如果原文件有内容则会清空原内容,如果原文件不存在则会自动新建一个文件)

 1 f=open('zhouyuan','w',encoding='utf-8')
 2 # f.read()
 3 f.write('周圆最美\n')
 4 f.write('周涛最丑\n')
 5 f.writelines(['666\n','888\n','999\n'])   #文件内容只能是字符串
 6 f.close()
 7 #结果:周圆最美
 8 #     周涛最丑
 9 #     666
10 #     888
11 #     999

【3】‘a’追加模式('a'直接追加到文件最后)

1 f=open('zhouyuan','a',encoding='utf-8')
2 f.write('写到文件最后')
3 #结果:周圆最美
4 #     周涛最丑
5 #     666
6 #     888
7 #     999
8 #     写到文件最后

【4】with使文件打开自动关闭

1 with open('zhouyuan','w') as f:
2     f.write('666\n')
3 #结果:将‘zhouyuan’里面的内容改成了‘666’

【5】文件的修改

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:
方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

 1 方法一:
 2 import os
 3
 4 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
 5     data=read_f.read() #全部读入内存,如果文件很大,会很卡
 6     data=data.replace('alex','SB') #在内存中完成修改
 7
 8     write_f.write(data) #一次性写入新文件
 9
10 os.remove('a.txt')
11 os.rename('.a.txt.swap','a.txt')
12
13 方法二:
14 import os
15
16 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
17     for line in read_f:
18         line=line.replace('alex','SB')
19         write_f.write(line)
20
21 os.remove('a.txt')
22 os.rename('.a.txt.swap','a.txt')

文件处理b模式

【b方式不能指定编码,b表示原生二进制字节形式】

1 f=open('zhouyuan','rb')
2 data=f.read()
3 #‘字符串------encode-------bytes’
4 #bytes-------decode-------‘字符串’
5 print(data)
6 print(data.decode('utf-8'))
7 #结果:b'666\r\n'  #【b表示原生二进制字节形式】
8 #        666

1 f=open('zhouyuan','wb')
2 f.write(bytes('你好漂亮\n',encoding='utf-8'))    #字符串以utf-8编码成字节
3 f.write('周圆'.encode('utf-8'))
4 #结果:你好漂亮
5 #     周圆

1 f=open('zhouyuan','ab')
2 f.write('小仙女'.encode('utf-8'))
3 #结果:你好漂亮
4 #     周圆小仙女

文件操作其他方法

1 f=open('a.txt','w',encoding=' gbk')
2 f.write('nihao')
3 print(f.closed)   #判断文件是否关闭
4 print(f.encoding) #显示编码,显示打开的编码,与文件以什么编码存入无关
5 f.flush()  #自动保存,从内存中到硬盘。不需要人工保存
6 print(f.tell())  #显示光标位置在哪
7 #结果:False
8 #     gbk
9 #     5

转载于:https://www.cnblogs.com/zhouyuan666/p/9513170.html

python—文件处理相关推荐

  1. 在pycharm中无法引入同一目录下的python文件

    问题 同一目录下存在以下两个python文件: 1. app.py 2. forms.py 现在我希望在app.py中引入forms.py的某个函数,但是出现如下情况: 主要表现在: 函数标红 无法自 ...

  2. 关于python文件读写小结

    读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...

  3. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  4. python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能

    python 文件追加写入 欢迎 (Welcome) Hi! If you want to learn how to work with files in Python, then this arti ...

  5. Python 文件 close() 方法

    描述 Python 文件 close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误. close() 方法允许调用多次. 当 file 对 ...

  6. python文件和目录

    # -*- coding: utf-8 -*-import osdef printFile(rootDir):allFiles = os.listdir(rootDir) #列出文件夹下所有文件和目录 ...

  7. 深度学习运行python文件,出现跨路径搜索其他module,怎么解决?

    在运行的目标python文件顶部,添加需要用的模块的搜索路径: 1)import sys, os sys.path.append(os.pardir) #添加的路径是,待运行目标python文件所在文 ...

  8. 第九课.Python文件操作

    Python文件读写 最基本的,通过open返回文件句柄(文件对象),将文件读入内存: #f是一个文件对象 f=open('./sample.txt') data=f.read()#read读取所有内 ...

  9. sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用

    sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用 打开pycharm --> Run --> Edit Configurations --> ...

  10. python文件信息排序_python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...

最新文章

  1. 2022-2028中国工作服市场现状及未来发展趋势
  2. oracle11g数据库升级
  3. mysql总结 博客园_mysql总结
  4. 用js改变embed标签的src值
  5. docker 核心概念整理
  6. Azkaban任务调度(使用带有依赖的任务调度)【mapreduce数据清洗,数据入hive库,kylin预编译、数据分析】
  7. url中携带中文乱码问题
  8. redis watch multi exec 关系
  9. eclipse创建pojo_使用Eclipse Hibernate插件逐步为POJO域Java类和hbm自动生成代码
  10. php多功能引流工具箱源码
  11. c# 之继承、封装、多态
  12. My97DatePicker日期控件的使用
  13. Git CMD - diff: Show changes between commits, commit and working tree, etc
  14. 优化网站性能 提高网站速度访问速度的14条实践(转)
  15. 关于“VS2013无法启动程序,系统找不到指定的文件“这个问题的一个解决方法
  16. 简单的Flash网络游戏源代码
  17. WebService学习总结(6)——WebService常用接口
  18. 10款精美的web前端源码的特效
  19. X.509证书与java
  20. 【教男朋友用python做计量】03.利用python进行假设检验(1)

热门文章

  1. java swing 外观_swing专业外观
  2. in not 效率太慢_[笔记] SQL性能优化 - 避免使用 IN 和 NOT IN
  3. 性能测试脚本用例模版
  4. 网络模型(看这一篇就够了)
  5. RabbitMQ(二) | 消息可靠性(消息确认机制、消息持久化、消息重试机制)
  6. 渗透测试-使用metasploit的evasion模块生成后门木马
  7. 共模信号_共模和差模的区别
  8. python3实例(一)平方根
  9. 【谷歌地图--PlacesSDK集成】
  10. 基于堆叠双向LSTM的中文诗歌生成