1.文件的读写

1.1.文件的创建与写入

  • 利用内置函数open获取文件对象

  • 文件操作的模式之写入

  • 文件对象的操作方法之写入保存

  1. 1 # coding:utf-8
  2. 2
  3. 3 import os
  4. 4
  5. 5 current_path=os.getcwd()
  6. 6 file_path=os.path.join(current_path,'test_os.txt')
  7. 7
  8. 8 f=open(file_path,'w',encoding="utf-8") #Windows系统在写入中文时需要设置编码格式
  9. 9 f.write("Hello Python;你好 Python")
  10. 10 #f.read() io.UnsupportedOperation: not readable,控制台报错,因为f是w模式
  11. 11 f.close()
  12. 12
  13. 13 f=open(file_path,'w+',encoding="utf-8") #Windows系统在写入中文时需要设置编码格式
  14. 14 f.write("Hello World;你好 世界")
  15. 15 print(f.read()) #无内容输出,read读取文件的话 是从最后一个角标读取
  16. 16 f.seek(0) #此时调用seek,选择从索引开始读取,则会读取所有刚才写入的字符串
  17. 17 print(f.read()) #Hello World;你好 世界
  18. 18 f.close()
  19. 19
  20. 20 f=open(file_path,'ab')#a:追加,b:比特类型
  21. 21 message="python很有意思"
  22. 22 #message=b"python很有意思" SyntaxError: bytes can only contain ASCII literal characters.之前的知识,我们使用b对字符串内容转译成比特类型报错,因为b特类型不能有汉字,所以得采用其他办法
  23. 23 _message=message.encode("utf-8") #将字符串变成比特类型
  24. 24 f.write(_message)
  25. 25 f.close()
  26. 26
  27. 27 f=open(file_path,'a')
  28. 28 message=("1\n","2\n","3\n")
  29. 29 f.writelines(message)
  30. 30 f.close()
  1. 1 # coding:utf-8
  2. 2 import os
  3. 3
  4. 4 #练习1:自动创建python包
  5. 5 def creat_package(path):
  6. 6 if os.path.exists(path):
  7. 7 raise Exception('%s 已经存在,不可创建'% path)
  8. 8 os.makedirs(path)
  9. 9 init_path=os.path.join(path,'__init__.py')
  10. 10 f=open(init_path,'w')
  11. 11 f.write('# coding:utf-8\n')
  12. 12 f.close()
  13. 13
  14. 14 if __name__=='__main__':
  15. 15 current_path=os.getcwd()
  16. 16 path=os.path.join(current_path,'test1')
  17. 17 creat_package(path)
  1. 1 # coding:utf-8
  2. 2 import os
  3. 3
  4. 4 #练习2:写入文件
  5. 5 class Open(object):
  6. 6 def __init__(self,path,mode='w',is_return=True):
  7. 7 self.path=path
  8. 8 self.mode=mode
  9. 9 self.is_return=is_return
  10. 10
  11. 11 def write(self,message):
  12. 12 f=open(self.path,mode=self.mode)
  13. 13 if self.is_return:
  14. 14 message= '%s\n' %message
  15. 15 f.write(message)
  16. 16 f.close()
  17. 17
  18. 18 if __name__=='__main__':
  19. 19 current_path=os.getcwd()
  20. 20 open_path=os.path.join(current_path,'a.txt')
  21. 21 o=Open(open_path)
  22. 22 o.write("Hello World")
  1. 1 # coding:utf-8
  2. 2 import os
  3. 3
  4. 4 #练习2:容错处理完善
  5. 5 class Open(object):
  6. 6 def __init__(self,path,mode='w',is_return=True):
  7. 7 self.path=path
  8. 8 self.mode=mode
  9. 9 self.is_return=is_return
  10. 10
  11. 11 def write(self,message):
  12. 12 f=open(self.path,mode=self.mode)
  13. 13 if message.endswith("\n"):
  14. 14 self.is_return=False
  15. 15 if self.is_return:
  16. 16 message= '%s\n' %message
  17. 17 try:
  18. 18 f.write(message)
  19. 19 finally:
  20. 20 f.close()
  21. 21
  22. 22 if __name__=='__main__':
  23. 23 current_path=os.getcwd()
  24. 24 open_path=os.path.join(current_path,'a.txt')
  25. 25 o=Open(open_path,'a')
  26. 26 o.write("Hello World\n")

1.2.文件的读操作

  • 文件操作的模式之读

   r:返回数据类型为字符串;rb:读取bit类型

  • 文件对象的操作方法之读取

  1. 1 # coding:utf-8
  2. 2
  3. 3 import os
  4. 4
  5. 5 file_path=os.getcwd()
  6. 6 file=os.path.join(file_path,'a.txt')
  7. 7
  8. 8 #read用法,读取文件所有内容,返回的是字符串,read可以和seek配合使用,重置角标去取
  9. 9 f=open(file,'r')
  10. 10 # data=f.read()
  11. 11 # print(data)
  12. 12 '''
  13. 13 Hello World
  14. 14 Hello World
  15. 15 Hello World
  16. 16 '''
  17. 17
  18. 18 #readlines用法,返回的是一个列表,每个元素带\n换行
  19. 19 '''
  20. 20 data=f.readlines()
  21. 21 print(data) #['Hello World\n', 'Hello World\n', 'Hello World\n']
  22. 22 _data=[]
  23. 23 for i in data:
  24. 24 temp=i.strip() #strip默认去除空格,换行符等
  25. 25 if temp != '': #去除空行
  26. 26 _data.append(temp)
  27. 27 print(_data) #['Hello World', 'Hello World', 'Hello World']
  28. 28 '''
  29. 29
  30. 30 #readline用法,逐行去取
  31. 31 '''
  32. 32 data=f.readline()
  33. 33 print(data) #Hello World
  34. 34 data=f.readline()
  35. 35 print(data) #123
  36. 36 '''
  37. 37
  38. 38 #mode用法,使用什么方式打开open(path,mode)文件,返回mode的值
  39. 39 print(f.mode) #r
  40. 40
  41. 41 #name用法,返回文件名称
  42. 42 print(f.name) #D:\WorkSpace\Python_Study\a.txt
  43. 43 print(os.path.split(f.name)[1]) #a.txt
  44. 44
  45. 45 #closed用法,文件是否关闭
  46. 46 print(f.closed) #False
  47. 47 f.close()
  48. 48 print(f.closed) #True
  1. 1 # coding:utf-8
  2. 2 import os
  3. 3
  4. 4 #文件读写简单封装:
  5. 5 class Open(object):
  6. 6 def __init__(self,path,mode='w',is_return=True):
  7. 7 self.path=path
  8. 8 self.mode=mode
  9. 9 self.is_return=is_return
  10. 10
  11. 11 def write(self,message):
  12. 12 f=open(self.path,mode=self.mode)
  13. 13 if message.endswith("\n"):
  14. 14 self.is_return=False
  15. 15 if self.is_return:
  16. 16 message='%s\n'%message
  17. 17 try:
  18. 18 f.write(message)
  19. 19 finally:
  20. 20 f.close()
  21. 21
  22. 22 def read(self,is_strip=True):
  23. 23 result=[]
  24. 24 with open(self.path,mode=self.mode) as f:
  25. 25 data=f.readlines()
  26. 26 for line in data:
  27. 27 if is_strip: #is_strip需不需要去掉每个元素的\n
  28. 28 temp=line.strip()
  29. 29 if temp != '':
  30. 30 result.append(temp)
  31. 31 else:
  32. 32 if line !='':
  33. 33 result.append(line)
  34. 34 return result
  35. 35
  36. 36 if __name__=='__main__':
  37. 37 carrent_path=os.getcwd()
  38. 38 file_path=os.path.join(carrent_path,'a.txt')
  39. 39 o=Open(file_path,mode='r')
  40. 40 data=o.read()
  41. 41 print(data)

2.文件的应用

2.1.序列化

  • 初识序列化与反序列化

    • 序列化:将对象信息或数据结构信息进行转换,达到存储和传输的目的,最终的数据类型是有一定规则的字符串,可用于文件存储或网络传输
    • 反序列化:通过序列化生成的字符串反转回原来的形式
  • 可序列化的数据类型
    • 可序列化:number,str,list,tuple,dict(最常用的序列化数据类型)
    • 不可序列化:类,实例化对象,函数,集合不能进行序列化
  • Python中的json:通用序列化模块,所有编程语言都有,序列化与反序列化规则统一

  • Python中的pickle:只使用python编程语言,pickle性能比json好

  1. 1 # coding:utf-8
  2. 2 import json
  3. 3
  4. 4 a=99
  5. 5 b='str'
  6. 6 c=(1,2,3)
  7. 7 d=[4,5,6]
  8. 8 e={"name":"中国"}
  9. 9
  10. 10 #json序列化
  11. 11 a_json=json.dumps(a)
  12. 12 print(a_json,type(a_json)) #99 <class 'str'>
  13. 13 b_json=json.dumps(b)
  14. 14 print(b_json,type(b_json)) #"str" <class 'str'>
  15. 15 c_json=json.dumps(c)
  16. 16 print(c_json,type(c_json)) #[1, 2, 3] <class 'str'>
  17. 17 d_json=json.dumps(d)
  18. 18 print(d_json,type(d_json)) #[4, 5, 6] <class 'str'>
  19. 19 e_json=json.dumps(e)
  20. 20 print(e_json,type(e_json)) #{"name": "\u4e2d\u56fd"} <class 'str'>
  21. 21
  22. 22 #json反序列化
  23. 23 print(json.loads(a_json),type(json.loads(a_json))) #99 <class 'int'>
  24. 24 print(json.loads(b_json),type(json.loads(b_json))) #str <class 'str'>
  25. 25 print(json.loads(c_json),type(json.loads(c_json))) #元组反序列化后数据类型变成了列表,[1, 2, 3] <class 'list'>
  26. 26 print(json.loads(d_json),type(json.loads(d_json))) #[4, 5, 6] <class 'list'>
  27. 27 print(json.loads(e_json),type(json.loads(e_json))) #{'name': '中国'} <class 'dict'>
  28. 28
  29. 29 #特殊数据类型进行json序列化与反序列化
  30. 30 #布尔类型
  31. 31 print(json.dumps(True)) #true
  32. 32 print(json.loads(json.dumps(True))) #True
  33. 33 print(json.dumps(False)) #false
  34. 34 print(json.loads(json.dumps(False))) #False
  35. 35 #空类型
  36. 36 print(json.dumps(None)) #null
  37. 37 print(json.loads(json.dumps(None))) #None
  1. 1 # coding:utf-8
  2. 2 import pickle
  3. 3
  4. 4 #pickle用法同json,此处不再过多演示
  5. 5 e={"name":"中国"}
  6. 6
  7. 7 #pickle序列化
  8. 8 e_pickle=pickle.dumps(e)
  9. 9 print(e_pickle,type(e_pickle)) #b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x06\x00\x00\x00\xe4\xb8\xad\xe5\x9b\xbdq\x02s.' <class 'bytes'>
  10. 10
  11. 11 #pickle反序列化
  12. 12 print(pickle.loads(e_pickle),type(pickle.loads(e_pickle))) #{'name': '中国'} <class 'dict'>
  1. 1 # coding:utf-8
  2. 2
  3. 3 import json
  4. 4
  5. 5 def read(path):
  6. 6 with open('text.json','r') as f:
  7. 7 data=f.read()
  8. 8 return json.loads(data)
  9. 9
  10. 10 def write(path,data):
  11. 11 with open(path,'w') as f:
  12. 12 if isinstance(data,dict):
  13. 13 _data=json.dumps(data)
  14. 14 f.write(_data)
  15. 15 else:
  16. 16 raise TypeError('data is dict')
  17. 17 return True
  18. 18
  19. 19 data={"name":"张三","age":18}
  20. 20
  21. 21 if __name__=="__main__":
  22. 22 write('text.json',data)
  23. 23 print(read('text.json'))

2.2.yaml的用法

2.2.1.yaml格式的介绍

2.2.2.Python的第三方包---pyyaml

2.2.3.读取yaml文件的方法

  1. 1 #yaml文件内容
  2. 2 url:
  3. 3 https://www.baidu.com
  4. 4 types:
  5. 5 - 网页
  6. 6 - 百度百科
  7. 7 - 图片
  8. 8 dict_1:
  9. 9 name:12
  10. 10 age:18
  1. 1 # coding:utf-8
  2. 2
  3. 3 import yaml
  4. 4 def read(path):
  5. 5 with open(path,'r',encoding="utf-8") as f:
  6. 6 data=f.read()
  7. 7 result=yaml.load(data,Loader=yaml.FullLoader)
  8. 8 return result
  9. 9
  10. 10 if __name__=='__main__':
  11. 11 print(read("text.yaml"))

回顾:

Python基础入门(9)- Python文件操作的更多相关文章

  1. python基础入门之对文件的操作

    **python**文件的操作1.打开文件 打开文件:open(file,mode='r') file:操作文件的路径加文件名 #绝对路径:从根目录开始的 #相对路径:从某个路径开始 mode:操作文 ...

  2. python基础之元组、文件操作、编码、函数、变量

    1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...

  3. Python之路:Python 基础(三)-文件操作

    操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') # 还有一种方法open 例1.创建文件  f = file('myfile. ...

  4. Python基础(七)-文件操作

    一.文件处理流程 1.打开文件,得到文件句柄赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.基本操作 f = open('zhuoge.txt') #打开文件 first_line = ...

  5. python基础 (编码进阶,文件操作和深浅copy)

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从uni ...

  6. python基础(四)文件操作和集合

    一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...

  7. python基础(三)-- 文件操作

    一. 文件操作: 对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 现有文件如下 : Somehow, it seems the love I kn ...

  8. python3速查参考- python基础 5 -> 常用的文件操作

    文件的打开方式 打开方式 详细释义 r  以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb  以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+  以读写方式打开一个文 ...

  9. python基础--字符编码以及文件操作

    字符编码: 1.运行程序的三个核心硬件:cpu.内存.硬盘 任何一个程序要是想要运算,肯定是先从硬盘加载到当前的内存中,然后cpu根据指定的指令去执行操作 2.python解释器运行一个py文件的步骤 ...

  10. python基础一 day7 复习文件操作

    read()原样输出 读取出来的是字符串类型 readline()输出一行 读取出来的是字符串类型 readlines()把每行文本作为一个字符串存入列表,并返回列表 打开方式: b以bytes类型打 ...

随机推荐

  1. A Child's History of England.36

    CHAPTER 11 ENGLAND UNDER MATILDA AND STEPHEN The King was no sooner dead than all the plans and sche ...

  2. Set && Map

    ES6 提供了新的数据结构 Set, Map Set成员的值都是唯一的,没有重复的值,Set内的元素是强类型,会进行类型检查. let set = new Set([1, true, '1', 'tr ...

  3. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  4. oracle 外部表查alter日志

    --创建文件夹,路径是alter日志的路径 create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/orcl/orcl/ ...

  5. 访问网页全过程,用wireshark抓包分析

    用wireshark抓包查看访问网站过程 打开wireshark,打开一个无痕浏览器,输入网址,到网页呈现这一过程,网络数据包传递的消息都会被放在wireshark里.针对这些包,我们可以逐一分析,摸 ...

  6. zabbix之故障自治愈和分层报警

    在agent端修改配置文件 root@ubuntu:~# vim /etc/sudoers zabbix ALL=(ALL) NOPASSWD:ALL#:重启服务root@ubuntu:~# syst ...

  7. String.split()与StringUtils.split()的区别

    import com.sun.deploy.util.StringUtils; String s =",1,,2,3,4,,"; String[] split1 = s.split ...

  8. 大数据处理系列之(一)Java线程池使用

    前言:最近在做分布式海量数据处理项目,使用到了java的线程池,所以搜集了一些资料对它的使用做了一下总结和探究, 前面介绍的东西大多都是从网上搜集整理而来.文中最核心的东西在于后面两节无界队列线程池和 ...

  9. Linux下查看JDK安装路径

    在安装好Git.JDK和jenkins之后,就需要在jenkins中进行对应的设置,比如在全局工具配置模块,需要写入JDK的安装路径. 这篇博客,介绍几种常见的在Linux中查看JDK路径的方法... ...

  10. mysql 执行报错:Error querying database. Cause: java.sql.SQLSyntaxErrorException:which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

    1.这个错误发生在mysql 5.7 版本及以上版本会出现的问题: mysql 5.7版本默认的sql配置是:sql_mode="ONLY_FULL_GROUP_BY",这个配置严 ...