文件处理

一 介绍

文件的概念:

我们都知道计算机由三个部分组成:应用软件,操作系统,硬件。而应用软件需要储存数据,必须要向操作系统提出请求,

操作系统会提供一个硬盘虚拟的感念。这个概念就是文件的概念!

二 在python3中

f=open('a.text.py',mode='r',encoding='utf-8')

如果我们要在python中打开一个文件,

首先,我们要输入路径,

其次,要输入以什么样的方式打开。这是我写的是mode=(‘r’)(意思是指读)

最后,我们要输入,用什么方式来编码的。“utf-8”

要阅读此文件

data=f.read()

 最后一点要关闭文件(很重要!!!!

(电脑是不知道要关的,应用软件关闭了。但是,在内存中还没关掉,这样导致会占内存。)

f.close()

但很多同学会忘记这一点,所以有with结构来帮助with open('a.text','    pass

with open('a.text','r')  as read_f,open('a.text','w') as write_f
data=read_f.read()
write_f.write(data)

这样就不用f.close()来关闭文件了。

 强调

当我们f=(open。。。)一个软件的时候,如果我们没有为open指定编码,那么有可能会出现乱码。window系统默认是gbk,mac系统是utf-8。所以,要注意以什么编码方式存储,就用什么编码方式来打开。

二打开方式
1.打开句式:open(‘路径’,‘模式’)(针对文本模式)
f.open('a.text','r')
‘r’(文件只读,文件必须存在,如没有抛出异常) ‘w’(文件只可以写,不可以读,文件不存在,会自动创建,文件存在自动会清除) ‘a’ (文件不可以读,只可以追加,文件不存在则创建,文件存在会自动在末尾追加)

2.非文本模式)

我们只能用b模式,“b”模式存储方式是用字节方式来存储(可以存储文本模式,也可以存储图片.jgp模式,也可以存储视频.avi模式。但最大的区别就是不需要考虑字符编码)

‘rb’

‘wb’

‘aw’

读取内容是字节类型,写入时也是要字节类型。不能指定编码

#3 了解部分

“+”表示:可以同时读写某个文件

‘r+’:读写【可以读,可以写】

‘w+’:写读【可以写,可以读】

‘a+’:写读【可以写,可以读】

3.操作文件方法:

#掌握
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write('1111
222
') #针对文本模式的写,需要自己写换行符
f.write('1111
222
'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333
','444
']) #文件模式
f.writelines([bytes('333
',encoding='utf-8'),'444
'.encode('utf-8')]) #b模式

#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name

 四 文件内光标移动;

一: read(3):

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

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

(字符是元素,而字节是计量单位,类似于米,里面啊)

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

f.seek(3)
意思是移动了三个字节

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

五 文件的修改

文件存在于硬盘,只存在覆盖,不存在修改怎么一说,我们平时看到的修改都是模拟出来的效果。有两种方式来实现:

第一种:将硬盘中的文件全部加载到内存中,在内存中可以修改,修改好之后在覆盖原文件上面。

import os
     with open('a.text',‘r') as read_f,open('a.text.swap','w') as write_f:
    data=read_f.read()
    data=data.replace('alex','sb')
    write_f.write(data)
os.remove('a.text)
os.rename('a.text.swap','a.text')

第二种:将硬盘中的文件一条一条读入内存,修改完毕之后写入新的文件,然后用新的文件来覆盖老的文件,实现修改。

import os
     with open('a.text','r') as read_f,open('a.text.swap'.'w') as write_f:
           for line in read_f:
           if "alex " in line:
                line=line.replace('alex','sb')
           write_f.write(line)
os.remove('a.text')
os.rename('a.text.swap','a.text')

六 文件的复制

import sys
1=sys.argv.  #把命令行中的解释器后的空格分割的所有参数都存成列表
src_file_path=1[1]
dst_file_path=1[2]
with open(r'%s' %src_file_path,mode='rb') as src_f,
open(r'%s' %dat_file_path,mode='wb') as dst_f:

     for line in src_f:
         dst_f.write(line)
 




原文地址:https://www.cnblogs.com/wuchenyu/p/8631267.html