Python之文件操作

open()

完整版是: 

open(file,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

 

用来打开文件, 根据参数来创造一个文件对象.

file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:

文件对象常用参数

file参数

通过位置传参, 没有缺省值, 所以是必须由我们输入的参数.

可以写相对路径或者是绝对路径, 就是打开这个文件.

f = open('D:/test.txt')

mode参数

这个是以什么模式来打开这个文件

mode 参数有:

模式描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(不推荐)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

 

encoding参数

这是参数只能在文本模式下使用, 可以把没有被编码的文件内容, 按照encoding指定的编码表来编码.
Windows系统下默认的编码表GBK.
‘utf8’和’utf-8’的意思是一样的.
一般在打开文件的时候, 把encoding写上, 是一个好习惯.



 

 

 

 

 

文件对象常用方法



 

先要声明, 在操作文件的时候, 有一个指针的概念, 有点类似于word或者txt里面的光标, 指针就是指明当前的位置在哪.

 


 

read(size=-1)

读取文件的内容, size控制读取的字符个数或字节个数;
读完之后, 指针会指导尾部.

f=open('xxx.txt','r',encoding='utf8')
data=f.read(5)

 

write(‘context’)

给文件添加一些文本, ‘t’模式下写字符, ‘b’模式下写字节, 是在指针所在处往后写, 会覆盖后面的内容.
写完返回写入的字符数或者字节数个数.

f=open(xxxx','w',encoding='utf8')
f.write()

 

close()

关闭打开的文件, 文件用完了一定要关闭, 不然文件描述符不够用.

f=open('xxx','r',encoding='utf8')
f.close()

 

closed

注意是没有括号的, 用来判断这个文件是否关闭.
关闭了返回True, 没关闭返回False.

file.seek(pos, whence=0)


设置指针的位置;
whence的值, 0代表文件开头, 2代表文件尾部, 1表示相对于当前位置.
pos是走多少步, 在文本模式下, 在1,2(也就是相对位置和尾部)不能走非0的pos, 就是不能动.
只有在字节模式下, 才能从后往前走, 就是pos为负数.
seek()不允许在0, 就是开始位置, 把指针向左移动
文件指针和字符无关, 指针每移动一步, 都是移动一个字节
文本模式, 读写操作的都是字符
字节模式, 读写操作的都是字节

f.seek(0)#  移动光标到指定的位置print(f.read(4))

 

 

 

 

 file.tell()

查看指针的位置, 是当前位置, 按字节来数.

print(f.tell())#  取出光标位置print(f.read(2))print(f.tell())

 

file.readline(size=-1)

一行一行的读,
size控制读几个字符,
立即返回一个列表

print(f.readline())print(f.readline())#无论是read()还是readline(),光标会发生位置变化

file.readlines(hint=-1)


把所有行显示出来,
放在一个列表里面,
hint控制读几行.

print(f.readlines())#['昨夜寒蛩不住鸣。\n', '惊回千里梦,已三更。\n', '起来独自绕阶行。\n', '人悄悄,帘外月胧明。\n', '白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦断有谁听。']
#实例打印文件

data=f.readlines()#注意及时关闭文件f.close()

number = 0for i in data:    number += 1

    if number == 6:        i = ''.join([i.strip(), 'iiiii'])  # 取代万恶的+    print(i.strip())f.close()

 

file.writelines()


把列表补进去
列表内元素必须是str
\n得自己补上

 

file.fileno()


查看文件对象的文件描述符

 

还可以吧文件对象直接看成一个迭代器使用

 number=0 for i in f:#这是for内部将f对象做成一个迭代器,用一行去一行。     number+=1     if number == 6:         i = ''.join([i.strip(), 'iiiii'])  # 取代万恶的+         print(i.strip())     print(i.strip())

 

 

with

with 同时管理多个文件对象 with open('log1','r') as f_read, open('log2','w') as f_write:     for line in f_read:         f_write.write(line)
可以不用close()

 

 

 

 

 

 

 

 

ext: 

1.进度条实例

 

 
  

#flush():同步吧将数据从缓存转移到磁盘上去
##进度条实例
 import sys,time
 for i in range(30):
 sys.stdout.write("*")
 sys.stdout.flush()
 time.sleep(0.1)

 
  


#print的flush
 import sys,time
 for i in range(30):

 print('*',end='',flush=True)

 time.sleep(0.1)

 

2.truncate()截断函数

#truncate():截断数据(不能在r模式下)
#在w模式下:先清空,再写,再截断
#在a模式下:直接将指定位置后的内容截断 f.truncate(5) f.write('hello world') f.truncate(5) f.close()

 

3.终极问题 如何在磁盘修改文件

# 常规思路,由于磁盘存储机制不能完成 number=0 for line in f: number+=1 if number==3: f.write('alex')


#只能采取重新创建一个文件的思路 f_read=open('小重山','r',encoding='utf8') f_write = open('小重山2','w',encoding='utf8')

 number=0 for line in f_read: number+=1 if number==5: line=''.join([line.strip(),'alex\n']) line='hello 岳飞\n' f_write.write(line)f_read.close() f_write.close()

 

4.关于python文件编码

 

转载于:https://www.cnblogs.com/-qing-/p/10752617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值