博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十二)文件处理基础
阅读量:4873 次
发布时间:2019-06-11

本文共 2912 字,大约阅读时间需要 9 分钟。

文件处理

小试牛刀

文件句柄=open(文件路径,mode=文件的打开模式,encoding=字符编码)

with open('aaa.txt',mode='r',encoding='utf-8') as f:    print(f.readable())    print(f.read())    f.closed>>>True>>>你好,世界之窗

该地方采用相对路径,若采用绝对路径,需要加转义符r

默认就是mode=r 只读

以上操作涉及两方面的资源

  1. 操作系统需要打开文件
  2. f就是一个python 的变量
Character Meaning
‘r' open for reading (default)
‘w' open for writing, truncating the file first
‘a' open for writing, appending to the end of the file if it exists
‘b' binary mode
‘t' text mode (default)
‘+' open a disk file for updating (reading and writing)
‘U' universal newline mode (for backwards compatibility; should not be used in new code)
文件的两种打开模式

1、 默认为文本模式

r: 默认的打开模式,只读模式,文件如果不存在则报错

w: 只写模式,不可读,不存在则创建,存在则清空内容复写
a:只追加写模式,(写模式的一种)不可读,不存在则创建,存在则只追加内容,不复写。指针直接到末尾,通常用于记录log

with open ('aaa.txt',mode='r',encoding='utf-8') as f:    print(f.readline())     #只读一行,并把光标移动到下一行的首位置,可连续放n行可以读取n行数据    print(f.readlines())   #将文件内容全部读出并放于列表内    >>>你好,>>>>>>['你好,\n', '世界之窗\n', '我来了']with open('111.txt',mode='w',encoding='utf-8') as f:    f.write('hello')    print(f.writable())        L=['bruce',"said,he couldn't be caged"]    print(f.writelines(L))with open('222.txt',mode='a',encoding='utf-8') as f:    print(f.readable())    print(f.writable())    f.write('你好\n 这世界,我来了')

a 写模式的一种,

2、非文本模式(b模式,即二进制)

比如mp3,mp4,jpg等格式,只能用b模式,b表示以字节的方式操作,无需考虑字符编码。以b方式打开时,读取的内容是字节类型,写入时也需要提供字节类型,不能指定编码

with open('4.jpg',mode='rb') as f:    print(f.readable())    print(f.writable())    print(f.read())    >>True>>>False

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

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

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

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

f.read() #读取所有内容,光标移动到文件末尾f.readline() #读取一行内容,光标移动到第二行首部f.readlines() #读取每一行内容,存放于列表中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模式f.readable() #文件是否可读f.writable() #文件是否可读f.closed #文件是否关闭f.encoding #如果文件打开模式为b,则没有该属性f.flush() #立刻将文件内容从内存刷到硬盘f.name

文件内光标移动

一: read(3):

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

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

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

注意:

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

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

  3.
  

文件的修改

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import oswith open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:    data=read_f.read() #全部读入内存,如果文件很大,会很卡    data=data.replace('alex','SB') #在内存中完成修改    write_f.write(data) #一次性写入新文件os.remove('a.txt')os.rename('.a.txt.swap','a.txt')

方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import oswith open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:    for line in read_f:        line=line.replace('alex','SB')        write_f.write(line)os.remove('a.txt')os.rename('.a.txt.swap','a.txt')

转载于:https://www.cnblogs.com/morron/p/8950817.html

你可能感兴趣的文章
mysql 时间设置
查看>>
如何在 Xcode 中修改应用的名字
查看>>
[BZOJ5334][TJOI2018]数学计算(exgcd/线段树)
查看>>
[BZOJ4340][BJOI2015]隐身术(后缀数组)
查看>>
有关交换机——熟悉原理是必须的【转载】
查看>>
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
查看>>
【转】Android 读取doc文件
查看>>
P2602 [ZJOI2010]数字计数 (数位dp or 思维)
查看>>
C# 访问 C DLL
查看>>
Matlab与方程组
查看>>
NYOJ 477
查看>>
华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像...
查看>>
OSPF笔记
查看>>
PHP之abstract
查看>>
Rappid 消除试用版的弹出框
查看>>
精华 ionic入门之色彩、图标、边距和界面组件:列表
查看>>
顺变者昌
查看>>
Linux上vi(vim)编辑器使用教程
查看>>
promise intro2-用法
查看>>
极客范:如何使用 Cloud Insight 来监控闭路电视?
查看>>