python--文件操作

  博客地址:http://www.cnblogs.com/yudanqu/

一、读文件

  要把大象装冰箱,需要分几步?对于读写文件也是这样简单的流程,打开文件、读取文件和关闭文件。

  描述符:文件所有操作涉及到描述符,描述符就是一个光标,读取数据可以从光标开始向后依次读,等等。

1、打开文件

open(path, flag[, encoding][, errors])
  • path:要打开文件的路径
  • flag:打开方式
    • r    以只读的方式打开文件,文件的描述符放在文件的开头
    • rb  以二进制格式打开一个文件用于只读,文件的描述符放在文件的开头
    • r+  打开一个文件用于读写,文件的描述符放在文件的开头
    • w   打开一个文件只用于写入,如果该文件已经存在会覆盖,不存在则创建新文件
    • wb 打开一个文件只用于写入二进制,如果该文件已经存在会覆盖,不存在则创建新文件
    • w+ 打开一个文件用于读写,如果该文件已经存在会覆盖,不存在则创建新文件
    • a    打开一个文件用于追加如果文件存在,文件描述符将会放到文件末尾
    • a+  
  • encoding:编码方式(一般utf-8)
  • errors:错误处理(一般不处理)
1 # 小栗子
2 f = open(path, "r", encoding="utf-8", errors="ignore")
3 # ignore 忽略错误,一般不写后两个参数

2、读文件内容

 1 # 读取文件全部内容
 2 str1 = f.read() # 读文件比较小的,大的内存放不下
 3 
 4 # 读取指定字符数(按字符数)
 5 str2 = f.read(10) # 一个字母和一个汉字都称为一个字符
 6 
 7 # 读取整行,包括"\n"字符
 8 str3 = d.readline()
 9 
10 # 读取指定字符数
11 str4 = f.readline(10)
12 
13 # 读取所有行并返回列表
14 str5 = f.readlines()
15 
16 # 若给定的数字大于0,返回实际size字节的行数
17 str6 = f.readlines(25) # 例如25个字节,每行存10个,那么此时读取两行
18 
19 # 修改描述符的位置
20 f.seek(10) # 改到第几个字符的位置

3、关闭文件

1 f.close()

4、小栗子

# 一个完整的过程

try:
    f1.open(path, "r", encoding="utf-8")
    print(f1.read())
finally:
    if f1:
        f1.close()

# try...except...else...finally是异常处理的内容,这个例子用到的部分表示,如果打开读取文件部分出错,只要文件存在那么就在最后把文件关闭,这是一个很好的习惯,就比如说在Linux操作系统中,限制打开的文件数不超过1024个如果超过了,文件就打不开了

  当然这样写文件有些繁杂,那么还有更方便的方法:

# 简单方法:

with open(path, "r", encoding="utf-8") as f2:
    print(f2.read())

# with可以把文件关闭的部分实现,不论我们是否操作,是否有错误,都会在最后帮我们把文件关闭,也避免了我们忘记关文件的困扰

二、写文件

 1 f = open(path,"w") # 首先以写方式打开文件
 2 
 3 # 将信息写入缓冲区,而并没有直接写入文件当中,也就是说我们在写文件时看文件中,没有信息随时写入
 4 f.write("glabscufn")
 5 
 6 # 刷新缓冲区(要想边写边存入文件的话可以手动刷新缓冲区)
 7 f.flush() # 直接把内部缓冲区的数据立刻写入文件,而不是被动的等待文件关闭自动刷新缓冲区写入
 8 
 9 '''
10 缓冲区的刷新:
11 1、文件关闭自动刷新 
12 2、手动flush刷新 
13 3、缓冲区满了也可以自动刷新 
14 4、再有就是遇到'\n'也会刷新
15 '''
16 
17 f.close()

三、编码与解码

1、编码

1 with open(path, "wb") as f1:
2     str = "asdasdasdasd"
3     f1.write(str.encode('utf-8')) # 用utf-8编码

2、 解码

1 with open(path, "rb") as f2:
2     data = f2.read()
3     new_data = data.decode("utf-8")
4     print(type(data)) # class<byte>
5     print(type(new_data)) # class<str>
6 # 主要是在有中文的情况下,其他情况不同的码可能也译码正确
7 # 如果是二进制的字符串,要记得编码解码

四、list,tuple,dict,set

 1 import pickle # 数据持久性模块,就是把数据存到磁盘
 2 
 3 #
 4 mylist = [1,2,3,4,5,"sadd"]
 5 f = open(path, "wb")
 6 pickle.dump(mylist, f)
 7 f.close()
 8 
 9 #
10 f1 = open(path, "rb")
11 templist = pickle.load(f1)
12 print(templist)
13 f1.close()

  作者:渔单渠(yudanqu)

  博客地址:http://www.cnblogs.com/yudanqu/

猜你喜欢

转载自www.cnblogs.com/yudanqu/p/9092822.html
今日推荐