基本的文件处理

什么是文件

  • 文件是操作系统提供的虚拟的单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂然后寻找数据.

如何使用文件

  1. 打开文件()
  2. 读写数据
  3. 保存
  4. 关闭文件

使用Python写一个小程序控制文件

open(打开文件)

  • 格式:open('文件名', mode='模式', encoding='编码格式')
  • 模式默认为r,编码格式默认为读取软件的编码格式
  • 如果在txt中写编码格式则为gbk,在Pycharm或者Python中写则为utf-8, word编码格式不是gbk也不是utf-8,不懂可以参考上一篇文章
fr = open('test1.txt', mode='r', encoding='utf-8')

read:

  • 默认一次性全部读取,里面的参数可以设置从第几个字符开始看,按字符算,其他都是按字节算

  • 读取完了后,再进行读取,则为空

data = fr.read()       # 用data去接收返回值,也就是文本的内容
print(data) # 输出文本内容

readline:一次性读取一行

  • 一次性读取一行,会读取\n
  • 如果读完所有数据,继续读取为空
print(fr.readline())

del:删除

  • 只是删除了变量名,但是文件对于操作系统来讲,还是打开状态的
del fr

close:关闭

  • 不仅删除了变量名fr,而且也关闭了文件,这个时候文件对于操作系统来说是关闭状态的
fr.close()
  • 打开文件时操作的是硬盘和内存
  • 而Python3只是软件,无法操控硬件,所以也是由操作系统在进行交互
  • 所以当你用del删除变量名时,只是删除了变量名的内存占用,并没有让操作系统关闭文件

write(写入)

  • 会清空当前文件的内容,再写
fw = open('test1.txt', mode='w', encoding='utf-8')
fw.write('12345')

flush 快速刷入硬盘

提高写入优先级,写完write习惯性加一个flush

绝对路径

  • 文件在电脑上的路径
fr = opne(‪'C:\Users\Y\Desktop\123.txt', mode = 'r', encoding = 'utf-8')

相对路径

  • 文件相对于工作文件夹的路径

  • 注意打开的文件夹和运行的py文件需要是同文件夹下的,不然需要修改相对路径的一些信息

文件的三种打开方式

mode = 'r' , 只读, 默认模式

fr = open('test.txt', mode = 'r', encoding = 'utf-8')  # 默认r,和rt相同

mode = 'w' , 只写,会清空之前的内容

fw = open('test.txt', mode = 'w', encoding = 'utf-8')

mode = 'a' , 追加,在后面追加写入文件

fa = open('test.txt', mode = 'a', encoding = 'utf-8')

mode = 'rt' , 打开的text文本类型

  • 和r相同
fr = open('test.txt', mode = 'rt', encoding = 'utf-8')

mode = 'rb' ,打开的bytes类型,(二进制)

  • 没有encoding,因为本身就是二进制不需要编码
frb = open('test.txt', mode = 'rb')

'wt', 'at'和'w', 'a'相同,而'wb', 'ab'用不上,你不会写二进制

在字符串前面加r,告诉接下来的字符串,里面所有特殊字符(如\)都毫无意义
在字符串前面加b,是告诉print字符串里面是二进制数,不要再用终端的编码进行编译了,原生打印就可以了

with open()

  • 比open()好用,会自动关闭,不需要写close
  • 里面的写法和open一样,只是变量名用as写到后面,下面的内容要缩进
with open('test.txt', mode='r', encoding='utf-8') as 变量名:

文件高级应用

  • r+:可读可写,会替换写

  • w+:可读可写,但是会清空写)

  • a+:可读可写,追加写

  • 以上三种方式不推荐使用,可以先读再写,没必要同时

指针

  • 需要有一个文件,并且打开,指针就是光标所处的位置
  • 不推荐使用
with open('test.txt', mode='r+', encoding='utf-8') as fr:
fr.seek(3) # 三个字节
fr.write('123')
fr.flush()

原文件: 999999

修改后:999123

  • 文件的写没有插入一说,只有替换,覆盖

  • 而电脑word或者txt文本中的可以直接插入其实是

  • 一个中文是3个字节,一个英文是1个字节,一般都是字节,只有read中是字符

seek(a,b)

  • a是指针移动的字节数

  • b如果是0是文件开头,1是指针当前位置,2是末尾,但如果要1或者2,那么只能使用2进制

tell

  • 告诉光标当前的位置

read

  • read中有一个参数,是光标移动的字符个数,只有这次用的是字符

truncate

  • 清空文本,如果有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空,无视之前用seek移动的光标位置

文件的拷贝

  • 修改文件时,为了防止两个应用程序同事修改同一份文件,而导致报错,因为你书写是一个修改的过程,而当第一个程序修改了一个字符后,如果第二个程序也要修改这个字符,那么就会报错
  • 为了避免这种情况,会在修改时新建一个拷贝文件,然后都在拷贝文件中进行修改,最后删掉原有的,把拷贝后的文件改名放进去

文件修改的过程(示例)

# 把文件读出来,替换内容
with open('test.txt', mode='r', encoding='utf-8') as fr:
data = fr.read()
data = data.replace('a', 'b') # 另外用一个文件,写入替换后的内容
with open('test_swap.txt', mode='w', encoding='utf-8') as fw:
fw.write(data) # 用os模块删除test文件,再把test_swap文件改名成test
import os os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')
# 简便版
# 把文件读出来,替换内容,再写入一个文件中
with open('test.txt', mode='r', encoding='utf-8') as fr,\
open('test_swap.txt', mode='w', encoding='utf-8') as fw:
data = fr.read()
data = data.replace('a', 'b')
fw.write(data) # 用os模块删除test文件,再把test_swap文件改名成test
import os os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')

修改文件内容的两种方式

  • 第一种,上面写的,把文件全部读出来,然后一起替换
  • 第二种,下面写的,对文件进行逐行修改,节省内存空间(推荐)
import os
with open('test.txt', mode='r', encoding='utf-8') as fr,\
open('test_swap.txt', mode='w', encoding='utf-8'):
# 循环读取内容,逐行修改
for line in fr: # 和for line in fr.read():效果一样
line = line.replace('a', 'b')
# 新文件写入原文件修改后的内容,之所以不会每次写入都清空之前的数据,是因为清空这个过程并不是write造成的,而是在open文件时,mode='w'造成的.所以循环写入不会有影响
fw.write(line)

enumerate

会在原有的值前面加一个下标值,用k,v 去接受,类似于items

day13 基本的文件操作(好东西)的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. python 文件操作(转)

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  3. python文件操作

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  4. python学习道路(day3note)(元组,字典 ,集合,字符编码,文件操作)

    1.元组()元组跟列表一样,但是不能增删改,能查.元组又叫只读列表2个方法 一个 count 一个 index2.字典{}字典是通过key来寻找value因为这里功能比较多,所以写入了一个Code里面 ...

  5. 关于Python中的文件操作(转)

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  6. C的文件操作2

    [转] C语言文件操作  概述 所谓文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的mp3.mp4.txt.bmp.jpg.exe.rmvb等等.这些文件各有各的用途,我们通常将它 ...

  7. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  8. C语言文件操作

    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

  9. Python开发【第三章】:Python的文件操作

    一.文件操作模式概述 1.打开文件的模式: r, 只读模式[默认] w,只写模式[不可读:不存在则创建:存在则删除内容:] a, 追加模式[不可读:不存在则创建:存在则只追加内容:] 2." ...

随机推荐

  1. 如何在sublime上运行php

    这个问题虽然随便一搜都能有很多答案,但是我当时都没有顺利解决我会详细地写出较为容易理解和操作的步骤第一步,配置PHP环境变量如图一所示1.找到 我的电脑 -属性2.高级系统设置3.环境变量4.找到“系 ...

  2. js通过String取得对应全局Object的值

    //假设有个全局对象Person var Person = { 'name' : 'alice' } //通过某种配置,获得了字符串形式的对象名 var thisPerson = 'Person'; ...

  3. C++ STL-stack使用详解

    stack 类是容器适配器,它给予程序员栈的功能--特别是 FILO (先进后出)数据结构. 该类模板表现为底层容器的包装器--只提供特定函数集合.栈从被称作栈顶的容器尾部推弹元素. 一:头文件 #i ...

  4. P3378 【模板】堆

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...

  5. OpenStack 发行版本

    2010年7月,Rackspace和美国宇航局联合其他25家公司启动了OpenStack项目 OpenStack的发行版本时间表和核心项目 OpenStack发行版本 名称 日期           ...

  6. ajax提交数据遇到400异常,原因及解决方案

    开发中遇到的问题, ajax的URL写的正确但是确无法正常跳转, 开发者模式下显示请求400异常. 前后台代码如下 ------------------------------------------ ...

  7. 你必须搞清楚的String,StringBuilder,StringBuffer

    String,StringBuilder 以及 StringBuffer 这三个类的关系与区别一直是 Java 的经典问题,这次就来讲一下关于这三个类的一些知识 一. 简单对比 String : 字符 ...

  8. 转-----------------------js window.open() 操作

    <% if request("infoid")<>"" then set rs=conn.execute("select * fro ...

  9. php PDO连接mysql

    近期在linux装了新的环境.php5.6+mysql5.5+nginx. 然后用原来的mysql链接数据库出现的错误. 原因就是说连接数据库的方法太旧.建议我用mysqli和PDO来连接数据库. 好 ...

  10. Chromium网页输入事件捕捉和手势检測过程分析

    连续的输入事件可能会产生一定的手势操作.比如滑动手势和捏合手势. 在Chromium中,网页的输入事件是在Browser进程中捕捉的.Browser进程捕获输入事件之后,会进行手势操作检測.检測出来的 ...