首页 > 其他 > 详细

文件操作

时间:2021-04-13 10:24:28      阅读:24      评论:0      收藏:0      [点我收藏+]

# 文件操作

## open

### 文件写操作时,打开文件mode值的设定

- mode="w"对文件写操作,文件没有就创建文件,写操作时把原有文件覆盖

  def datawrite(data):
      with open("md3.txt",mode="w+",encoding="utf-8") as f:
          f.write(data)
          
  datawrite("我爱学习python")
  datawrite("我叫林明均")
  结果:文件里:我叫林明均
  

- mode="w+"对文件可写可读操作,文件没有就创建文件,写操作时把原有文件覆盖,注意读时候指针的位置,写完时(指针)在字符末端,所以要用f.seek(0)把指针返回最开始端

  def datawrite(data):
      with open("md3.txt",mode="w+",encoding="utf-8") as f:
          f.write(data)
          f.seek(0)
          rdata = f.read(len(data))
          print(rdata)
  datawrite("我爱学习python")
  datawrite("我叫林明均")
  结果:
  打印:我爱学习python
        我叫林明均
  文件里字符:我叫林明均
  

- mode="r+"对文件可读可写,没有文件就报错,注意读完后(指针)在字符后面,这时候如果写是跟在原字符后面

  #原来文件字符:我叫林明均
  def datawrite(data):
      with open("md3.txt",mode="r+",encoding="utf-8") as f:
  
          # f.seek(0)
          rdata = f.read()
          print(rdata)
          f.write(data)
      datawrite("你喜欢编程吗")
        
  datawrite("你喜欢编程吗")
  结果:打印:我叫林明均
            文档:我叫林明均你喜欢编程吗
  
  

- mode="a"在原来字符串后面追加写,没有文件就创建
- mode="a+"在原有字符后面追加写,并且可读,但是注意(指针)位置,如果要读,需要用f.seek()指定指针位置

  #文件原来有:我叫林明均
  def datawrite(data):
      with open("md3.txt",mode="a+",encoding="utf-8") as f:
  
          # f.seek(0)
  
          f.write(data)
          f.seek(0)
          rdata = f.read()
          print(rdata)
  datawrite("你喜欢编程吗")
  结果:
  文件和打印结果:我叫林明均你喜欢编程吗
  

- mode="wb/rb/wb+/rb+/ab+/ab"以二进制读写,open()不能带encode参数,而且读回的参数是二进制的(以16进制方式显示),需要解码(rdata.decode(encoding="utf-8"))才能显示,读的时候要对字符编码(data.encode(encoding="utf-8"))

  #原文件里面有:我叫林明均
  def datawrite(data):
      with open("md3.txt",mode="rb+") as f:
  
          # f.seek(0)
  
          # f.write(data)
          # f.seek(0)
          rdata = f.read()
          print(rdata)
          print(rdata.decode(encoding="utf-8"))
          f.write(data.encode(encoding="utf-8"))
  datawrite("你喜欢编程吗")
  结果:
  文件:
  我叫林明均你喜欢编程吗
  
  打印:b‘\xe6\x88\x91\xe5\x8f\xab\xe6\x9e\x97\xe6\x98\x8e\xe5\x9d\x87‘
  我叫林明均
  

## read

### f.read()

- 全部读取或者指定位数读取

  #文件中:
  林明均
  林明伟
  美丽阳光家园
  
  def dataread():
      with open("md3.txt",mode="r",encoding="utf-8") as f:
          d = f.read(8)
          print(len(d))
          print(d)
  dataread()
  结果:
  8
  林明均
  林明伟
  

### f.readlines()

- 读取整个文件,以列表方式返回,列表中字符串后换行\n不去除,可以用for...in把列表分成行

  #文件中:
  林明均
  林明伟
  美丽阳光家园
  
  def dataread():
      with open("md3.txt",mode="r",encoding="utf-8") as f:
  
          list = f.readlines()
          print(list,type(list))
  
          for i in range(len(list)):
              # print(list[i])
            list[i]=list[i].rstrip(‘\n‘)
          print(list)
  dataread()
  结果:
  [‘林明均\n‘, ‘林明伟\n‘, ‘美丽阳光家园\n‘] <class ‘list‘>
  [‘林明均‘, ‘林明伟‘, ‘美丽阳光家园‘]
  

### f.readline()

- 每次只读一行,返回行字符串,用于大文件读取

  #文件中:
  林明均
  林明伟
  美丽阳光家园
  def dataread():
      with open("md3.txt",mode="r",encoding="utf-8") as f:
  
  
          d = f.readline()
          print(len(d))
          print(d,type(d))
  
  dataread()
  4
  林明均
   <class ‘str‘>
  

### f.seek()

- 指针光标设置

## write

### f.write("string")

- 全部写入

### f.writelines([])

- 按行写入,串入字符串列表,而且每个字符串加\n换行

  x = ["姓名\n","学校","1\n"]
  def datawrite(data):
      with open("md3.txt",mode="w",encoding="utf-8") as f:
  
          f.writelines(x)
  datawrite(x)
  结果:
  姓名
  学校1
  
  

*XMind - Trial Version*

文件操作

原文:https://www.cnblogs.com/shalaotou/p/14651108.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!