2022年 11月 5日

Python 文件的读写模式

 一,

 r :读取模式(默认值)

 w:写入模式

 x:独占写入模式

 a:附加模式

 b:二进制模式

 t:文本模式(默认值,与其他模式结合使用)

 +:读写模式(与其他模式结合使用)

 r+: 打开文件进行读写,会覆盖文件原内容,重新写入;若文件不存在,则会报错

 w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

1,文件打开:

     使用open()函数打开一个文件,具体步骤如下:

     进入python模式:定义环境变量f 设置 f = open(‘text_datetime2.py’)

   

  mode=’r’:是文件的模式只读方式打开     encoding= ‘cp936’ 是以此种编码方式打开 (指定编码方式) 

  可通过help(open)方式打开:会显示出一些帮助的文档 如下图:

  

dir(f):可以看到很多方法:

      2,文件关闭:

        使用close()函数关闭文件

       f.close() 可以关掉文件 注意:需要做异常处理

    

    避免只记得打开文件,忘记关闭文件的问题以下介绍新的写法:

   with语法(上下文的管理器,在文打开的时候会把上下文记住,用完后会自动回收掉)

   写法:with open(“text_datetime2.py”) as f:do_something(f)

   到达该语句末尾时,将自动关闭文件,几遍出现异常亦如此

   

  二,文件的读取:

        read()读取文件:可以指定参数,表示读几个字符(字节)

        readline()读取一行数据,可以指定参数,表示读前几个字符(字节)

        readlines()读取所有行,返回列表;

     代码如下:

       

  1. def read_file():
  2. file_name = "test"
  3. file_path = "E:\\pythonProject\\test" #window下用\\这种斜杠
  4. file_path2 = "E:/pythonProject/test" # mac linux下通用
  5. f = open(file_name,encoding='utf-8')
  6. """全部读取"""
  7. res = f.read()
  8. print(res)
  9. """读取指定字符"""
  10. res1 = f.read(10)
  11. print(res1)
  12. #在进行读取10个字符,接着res1读取的字符的位置继续往后读
  13. res2 = f.read(10)
  14. print(res2)
  15. """随机读取字符"""
  16. #跳过20个字符,在读取5个字符(此时报错,可能因为中文的编码和英文的编码有些不一致,
  17. # 可能一个汉字占了两个字节,把文件内容改成英文的就可以正常执行。中文要慎用随机读取)
  18. f.seek(10)
  19. print(f.read(5))
  20. """按行读取"""
  21. res3 = f.readline()
  22. print(res3)
  23. print(f.readline(4))#指定读取行数
  24. """读取所有行"""
  25. res4 = f.readlines()
  26. print(res4)
  27. f.close()
  28. if __name__ == '__main__':
  29. read_file()

 

 三,文件的写入:

         1,使用wirte()函数向打开的文件对象写入内容:

          代码如下,最好放在编辑器里运行一下:

         运行结果 会自动新建一个wirte_text的文件,里面会出现写入的 hello world

  1. def write_file():
  2. file_name = "write_text"
  3. #以写入的方式打开文件
  4. f = open(file_name,'w')
  5. #写入一行内容
  6. f.write('hello')
  7. #换行
  8. f.write('\n')
  9. #在写入一行内容
  10. f.write('world')
  11. #关闭文件
  12. f.close()
  13. if __name__ == '__main__':
  14. write_file()

 2,使用writelines()函数向打开的文件写入多行内容

  1. def write_multi_line():
  2. """向文件中写入多行内容"""
  3. file_name = "write_line.text"
  4. with open(file_name,'w',encoding='UTF-8') as f:
  5. c = ['第一行','\n','第二行','第三行']
  6. f.writelines(c)

 示例:记录用户日志,以 a 的方式进行打开

  1. import random
  2. from datetime import datetime
  3. def write_user_log():
  4. #记录用户时间 + 记录用户的ID
  5. rest = "用户:{0} - 访问时间{1}".format(random.randint(100,9000),datetime.now())
  6. file_name = "write_user_log.text"
  7. with open(file_name,'a',encoding='UTF-8') as f:
  8. f.write(rest)
  9. f.write('\n')

3,如果既要读取文件,又要写入文件:代码如下

     先读 在写入 用 r+ 的 可读可写模式

  1. def read_and_write():
  2. file_name = "read_write.text"
  3. with open(file_name,'r+',encoding="UTF-8") as f:
  4. read_rest = f.read()
  5. #如果没有1,写入 哈哈哈
  6. #如果有1,写入 嘻嘻嘻
  7. if '1' in read_rest:
  8. f.write('嘻嘻嘻')
  9. else:
  10. f.write('哈哈哈')
  11. f.write('\n')