python文件操作

python文件操作

       文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作。

 

一、python内置函数open()

       1、语法格式:

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

       此函数能够打开一个文件并返回文件对象。如果文件不能打开,则抛出操作系统异常OSError

       2、参数

  • 参数file是一个类似路径的对象,可以是字符串或数组表示的文件名称,文件名称是要打开文件的路径(绝对路径或者相对路径)。
  • 参数mode是指明打开文件的模式。
           ‘r’:只读模式打开文件,不可写入,此为参数默认值。
           ‘w’:写入模式打开文件,并且清空打开的文件。
            ‘x’:独占模式打开文件,如果文件已经打开,则会打开失败。
            ‘a’:写入模式打开文件,如果文件存在,则在文件末尾追加内容。
            ‘b’:二进制模式,例如读取声音、图像文件。
            ‘t’:文本模式,此为参数默认值。
            ‘+’:打开文件进行更新,可以读取或写入。
  • 参数buffering为可选参数,用于缓冲区的策略选择。
  • 参数encoding为文件编码,仅适用于文本文件。

  • 参数errors为编解码错误时进行的处理,但不能在二进制模式下使用。
  • 参数newline为文本模式指定下一行的结束符。可以是None,”,\n,\r,\r\n等。

  • 参数closefd用于传入的文件句柄,当退出文件时,不关闭文件句柄。
  • 参数opener用于实现自己定义打开文件方式。

二、文件的打开和关闭
 
#在Windows操作系统下打开文件,默认使用GBK编码打开,
#文本文件的写入utf8编码格式,打开也需要用utf8编码格式。
file=open('xx.txt',encoding='utf8')   #相对路径
file.read()      #打开文件
file.close()     #关闭文件

  

三、文件路径

       绝对路径:从电脑盘符开始的路径

              在windows系统里,文件夹之间用 \ 分隔

              在非windows系统里,文件夹之间用 / 分隔
 
       相对路径:当前文件所在的文件夹开始的路径
              'xx.txt'(或 ./xx.txt):当前文件夹
              'demo/xx.txt':下级文件夹
              '../xx.txt':上级文件夹
 
       路径书写的三种方式:1、' \\ ' 2、r ' \ ' 3、' / ' ( 推荐使用 )

 
四、文件打开方式
  • ' r ':只读模式,默认,打开文件后,只能读取,不能写入。如文件不存在,会报错。
  • ' w ':写入模式,打开文件后,只能写入,不能读取。如果文件存在会覆盖文件,如果不存在,会创建文件。
  • ' b ':以二进制形式打开文件。

  • ' a ':追加模式,会在最后追加内容。
  • ' r+ ',' w+ ':可读可写,很少用

file=open('xx.txt','rb')
print(file.read())      #二进制读取  b'\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xad'

file1=open('xx.txt','wb')
file1.write('好好学习'.encode('utf8'))  #二进制写入,转成文本

  

五、文件读取方式

file=open('aa.txt',encoding='utf8')
file.read()     #读取所有数据
file.readline()    #读取一行
file.readlines()    #读取所有数据,存入列表,每行为一个列表项
file.read(n)      #读取n的长度

  

六、文件拷贝

import os

old_file_name=input('请输入文件名:')
if os.path.isfile(old_file_name):
    names=old_file_name.rpartition('.')
    new_file_name=names[0]+'.bak.'+names[2]
    old_file=open(old_file_name,'rb')
    new_file=open(new_file_name,'wb')
    while True:
        content=old_file.read(1024)
        new_file.write(content)
        if not content:
            break
    new_file.close()
    old_file.close()

  

七、将数据写入内存

       将数据写入内存涉及到类StringIO
from io import StringIO

s_io=StringIO()
print('hello ',file=s_io,end='')    #控制台不显示
print('world!',file=s_io)           #控制台不显示
print(s_io.getvalue())              #控制台输出'hello world!'
s_io.close()

  

 八、json字符串

       文件的write,只能写入字符串或二进制,字典、列表、数字都不能写入到文件里。

       将数据转化为字符串有两种方式:1、repr/str 方法 2、使用json模块

       json本质就是字符串,区别在于json里用双引号表示字符串。
 

 列表的序列化dumps()

import json
names=['Jack','Rose','Merry']
name_json=json.dumps(names)
file=open('names.txt','w',encoding='utf8')
file.write(name_json)
file.close()

  

列表的序列化dump()

import json
names=['Jack','Rose','Merry']
file=open('names.txt','w',encoding='utf8')
json.dump(names,file)
file.close()

  

反序列化成字典loads()

import json
x='{"name":"Rose","age":18}'    #json字符串
p=json.loads(x)

  

反序列化成字典load():读取一个文件,并把文件里的json字符串加载为一个对象

import json
file=open('names.txt','r',encoding='utf8')  #names.txt {"name":"Jack"}
y=json.load(file)
file.close()

  

九、pickle的使用

       将python里的对象转化为二进制

       序列化:dumps()

       反序列化:loads()

import pickle
num1=['zhangsan','lisi','wangwu']
p=pickle.dumps(num1)   #列表序列化成二进制
file=open('name1.txt','wb')
file.write(p)    #写入序列(二进制)
file.close()

file1=open('name1.txt','rb')
q=file1.read()
r=pickle.loads(q)   #发序列化列表
print(r)

  

       序列化dump()

       反序列化load()

import pickle
num1=['zhangsan','lisi','wangwu']
file3=open('name3.txt','wb')
pickle.dump(num1,file3)    #二进制序列化之name3.txt
file3.close()

file4=open('name3.txt','rb')
y=pickle.load(file4)   #二进制加载到Python数据
file4.close()

 

       pickle:用来原封不动的转换成二进制,但是只能在Python里识别。

       json:只能保存部分信息,作用是用来在不同的平台里传输数据。json里存储的数据是基本的数据类型。

 

posted @ 2021-03-07 16:34  wangshanglinju  阅读(95)  评论(0编辑  收藏  举报