文件相关操作

计算机系统分为:计算机硬件,操作系统,应用程序三部分。我们用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. redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了
  2. RecyclerView中adapter列表里有EditText输入框问题(使用不复用方法解决)
  3. 点名系统在c++中怎么做_栅格系统是怎么做设计的
  4. 二十、Threaded I/O模型
  5. 【专利】检索网站到底哪个能用?
  6. sqlplus登录方式,列出所有表,列出表结构,sqlplus行和列显示设置,别名,空值问题,连接符,DISTINCT
  7. mysql 分组查询例子_分组查询GROUP BY用法例子详解
  8. 讲道理,我觉得TensorFlow太逊了
  9. ctab法提取dna流程图_CTAB法提取植物基因组DNA过程图示
  10. 视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
  11. (十二)random模块
  12. Android Studio 创建aar包与引用
  13. ArcGIS基本使用介绍
  14. 数据结构与算法教程——App推荐
  15. 积木游戏(java)
  16. HEW3工程链接错误(L2330 (E) Relocation size overflow )及解决
  17. 【小程序源码】强大的万年历微信小程序源码下载
  18. NR-DL PDSCH Resource allocation 下行资源分配
  19. 副高级职称的要求真的很难达到吗?
  20. 最新电脑cpu性能排行服务器,服务器cpu性能排行,教您服务器cpu性能排行

热门文章

  1. 菜鸟好文推荐(七)——他改了密码,姑娘说了“Yes, I do”
  2. 笔记本电脑怎么用u盘重装系统,u盘给电脑安装系统的方法
  3. android 5 root super su,针对Supersu也root不了手机的root详细使用教程
  4. 《Java高级程序设计》清华大学出版社 徐传远 课后习题答案
  5. [转]Windows服务“允许服务与桌面交互”的使用和修改方法
  6. net proxy FortiGate 200A / SANGFOR / Blue Coat
  7. Spring Aop 5种通知写法及参数JoinPoint详解
  8. php rrd 做统计数据,Ganlia采样、统计及RRD记录周期(频次、间隔)的配置和更改...
  9. GitHub 总星 4w+!删库?女装?表情包?这些沙雕中文项目真是我每天快乐的源泉!
  10. Android 中的长度单位详解(dp、sp、px、in、pt、mm)具体解释与换算