码迷,mamicode.com
首页 > 编程语言 > 详细

python之文件操作

时间:2018-12-09 18:55:04      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:移动   不显示   nod   readline   sequence   size   content   with open   seq   

文件操作
文件路径:d:\a.txt
编码方式:utf-8,gbk,GB2312....
操作方式:只读,只写,写读,读写,追加 等。
报错原因:
UnicodeDecodeError: ‘gb2312‘ codec can‘t decode byte 0xa6 in position 2: illegal multibyte sequence:
  编码不一致,存储文件时编码与打开文件时编码不一致。
路径问题:
1,在路径的最前面加转义字符r:r‘d:\a.txt‘
2,把每个\ 变成 \\ :‘d:\\a.txt‘
绝对路径: d:\a.txt 从根目录开始找
相对路径: 从当前目录,当前文件夹开始找。

f = open(rd:\a.txt,encoding=utf-8,mode=r)
content = f.read()
print(content)
f.close()

‘‘‘
f:文件句柄,可以理解为变量。
open():python的内置函数(内部调用的是windows的系统命令)

文件操作的三部曲:
1,打开文件,产生文件句柄。
2,对文件句柄进行操作。
3,关闭文件句柄。
‘‘‘


文件打开模式:
1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作,
而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

3,‘+‘模式(就是增加了一个功能)
r+, 读写【可读,可写】
w+,写读【可写,可读】
a+, 写读【可写,可读】

4,以bytes类型操作的读写,写读,写读模式
r+b, 读写【可读,可写】
w+b,写读【可写,可读】
a+b, 写读【可写,可读】

 

 



一、 读:整体四种方法
r *****(五小种方式)
  read() ***
  read(n)
  readline()
  readlines()

  for 循环 *****
rb ***
r+ *****
r+b:



mode可以不写,默认为r模式。
read(3):
  1. 文件打开方式为文本模式时(r),代表读取3个字符
  2. 文件打开方式为b模式时(rb),代表读取3个字节
其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate

具体实例:
1、r:只读模式[默认模式,文件必须存在,不存在则抛出异常]

 

技术分享图片
# 1,read 全部读取
f = open(文件操作1,encoding=utf-8,mode=r)
content = f.read() 
print(content)
f.close()

# 2,read(n):按照字符读取
f = open(文件操作1,encoding=utf-8,mode=r)
content = f.read(10) #r模式,按照字符读取(注意,文本的换行符虽然默认不显示,但是也是一个字符)。
print(content)
f.close()

# 3, readline 按行读取
f = open(文件操作1,encoding=utf-8,mode=r)
print(f.readline()) #读取第一行
print(f.readline()) #读取第二行...
f.close()

# 4,readlines 按行全部读取,返回一个list
f = open(文件操作1,encoding=utf-8,mode=r)
content = f.readlines()
print(content)
f.close()

# 5,for循环。一行一行输出
f = open(文件操作1,encoding=utf-8,mode=r)
for line in f:
    print(line.strip())
f.close()
技术分享图片

 

 

 

2、rb

技术分享图片
f = open(美女1.jpg, mode=rb)
content = f.read()
print(content)
f.close()

f = open(文件操作1, mode=rb)
content = f.read(9)  # rb模式 n 按照字节读取。
print(content)
f.close()
技术分享图片

 

3、r+(读写):先读后追加。

技术分享图片
f = open(文件操作1,encoding=utf-8,mode=r+)
content = f.read()
print(content)
f.write(666)
f.close()

f = open(文件操作1,encoding=utf-8,mode=r+)
content = f.read(3) #r+模式 n按字符读取
print(content)
f.write(666)
f.close()

# 不读直接写:直接从开始覆盖
f = open(文件操作1,encoding=utf-8,mode=r+)
f.write(深圳你好)
f.close()
技术分享图片

 



二、 写
w ***
wb **
w+
w+b
具体实例:
1、w
没有文件,创建文件也要写。
有文件,先清空,后写入。

f = open(文件操作2, encoding=utf-8,mode=w)
f.write(深圳市南山区,福田区,罗湖区。。。)
f.close()

 

2、wb

技术分享图片
f = open(美女1.jpg,mode=rb)
content = f.read()
print(content)

f1 = open( 美女2.jpg,mode=wb)
f1.write(content)
f.close()
f1.close()
技术分享图片

 

3、w+: 写读

技术分享图片
f = open(文件操作2, encoding=utf-8,mode=w+)
f.write(深圳市南山区,福田区,罗湖区。。。)
f.seek(3) # 调整光标
content = f.read()
print(content)
f.close()
技术分享图片

 


三、 追加
a ***
ab
a+
a+b


a:
没有文件,创建文件也要写。
有文件,直接在文件的最后面追加。

f = open(文件操作3, encoding=utf-8,mode=a)
f.write(\n南方水土好。。。)
f.close()

 



四、 文件操作的其他方法
read() *****
write() *****
close() *****
seek() *****
tell() *****
readable() ****
writable() **** 判断是否可写
truncate() **



具体实例:
其他方法:readable ,writable,seek

 

技术分享图片
f = open(文件操作1,encoding=utf-8) #不写mode,默认是r
if f.writable(): #判断是否可写
    content = f.read()
print(content)
f.close()

# seek:调整光标到开始seek(0) 调整光标到结尾seek(0,2)。0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
f = open(文件操作1,encoding=utf-8)
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()

f = open(文件操作1,mode=rb)
print(f.read())
f.seek(6) # 按照字节去移动光标
content = f.read()
print(content)
f.close()

# tell 告知光标的位置 *****
f = open(文件操作1,encoding=utf-8)
f.seek(0,2) # 按照字节去移动光标
print(f.tell())
f.close()

# truncate:要在writable模式下进行截取(可以在w使用,但是不推荐在w模式下使用)。
# 可在r+  a+  等使用,表示对原文件进行截取
# 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;
# 不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
f = open(文件操作1,encoding=utf-8,mode=r+)
print(f.truncate(6)) #以字节截取
f.close()

# with open:过一段时间自动关闭文件
# 1,主动关闭文件句柄
with open(文件操作2,encoding=utf-8) as f1:
    print(f1.read())

# 2,开启多个文件句柄。
with open(文件操作2,encoding=utf-8) as f1,open(文件操作3,encoding=utf-8,mode=w) as f2:
    print(f1.read())
    f2.write(666666)
技术分享图片

 

 

 


五、 文件的改 *****
1,以读的模式打开原文件,产生一个文件句柄f1.
2,以写的模式创建一个新文件,产生一个文件句柄f2.
3,读取原文件内容,进行修改,并将修改后的写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。

技术分享图片
# 方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
# low版:
import os
with open(小白的深度剖析, encoding=utf-8) as f1,open(小白的深度解析.bak,encoding=utf-8,mode=w) as f2:
    old_content = f1.read()
    new_content = old_content.replace(小白,SB)
    f2.write(new_content)
os.remove(小白的深度剖析)
os.rename(小白的深度解析.bak, 小白的深度剖析)

# 方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件
# 升级版:
import os
with open(小白的深度剖析, encoding=utf-8) as f1,open(小白的深度解析.bak,encoding=utf-8,mode=w) as f2:
    for line in f1:
        new_line = line.replace(小白,SB)
        f2.write(new_line)
os.remove(小白的深度剖析)
os.rename(小白的深度解析.bak, 小白的深度剖析)
技术分享图片

 

python之文件操作

标签:移动   不显示   nod   readline   sequence   size   content   with open   seq   

原文地址:https://www.cnblogs.com/yidashi110/p/10092287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!