python open()方法和文件读写

open()方法

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
打开一个文件并返回文件对象
如果该文件无法被打开,会抛出OSError
官方python document

参数

  • file - path-like object (representing a file system path) giving the pathname
  • mode (optional) - mode while opening a file. If not provided, it defaults to 'r' (open for reading in text mode). Available file modes are:
  • buffering (optional) - used for setting buffering policy
  • encoding (optional) - name of the encoding to encode or decode the file
  • errors (optional) - string specifying how to handle encoding/decoding errors
  • newline​ (optional) - how newlines mode works (available values: None' ''\n''r', and '\r\n'
  • closefd (optional) - must be True (default) if given otherwise an exception will be raised
  • opener (optional) - a custom opener; must return an open file descriptor
  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 编码或解码的 编码方式 一般使用utf8  注意encoding 和encode() 的区别,如果编码解码方式未指定,默认采用系统默认的编码方式,如果报错了,就改用utf-8 就能解决绝大部分编码问题。
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener:

一般只用到file,mode和encoding

mode参数

方式解释
'r'读模式(默认)
'w'写模式,打开时会清空文件
'x'写模式,新建一个文件,如果该文件已存在则会报错。
'a'添加模式,写文件只能写到文件末尾,不能读
'b'二进制模式
't'文本模式 (默认)
'+'打开一个文件进行更新(可读可写)
'U'通用换行模式(不推荐)
  • w:可读写,打开时清空文件,从开头开始编辑,即原有内容会被删除
  • r+:可读写,打开时不清空文件,可写到文件任何位置。默认在文件开始,因此会覆写文件
  • a+:可读写,打开时不清空文件,只能写到文件末尾,切记 光标在文档末尾,如果执行file.readline()的话,没有文本可读。

Ref: https://www.runoob.com/python/python-func-open.html

默认为文本模式,如果要以二进制模式打开,加上'b'; 注意区分 文件打开的模式model和 文件编码的方式encoding,别混了。

注意

使用open()方法一定要保证关闭文件对象,即调用close()方法

当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘同时释放资源。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。

使用with ... as ...

正常情况下,想要打开一个文件并且保证该文件会被关闭。我们需要

try:
    f = open('/path/to/file', 'r')
    # do something about f
finally:
    if f:
        f.close() 

注意上面file.close() 不要把括号丢了,丢了的话就会导致 文档写入不成功,但是好像有不报错。比较坑

使用with...as...能确保文件一定被关闭。

with open('/path/to/file', 'r') as f:
    f.read()
    ...

文件读写

读文件

with open('path/to/file', 'r', encoding='utf8') as f:
    f.read()
    f.readline()
    f.readlines()
  • read([size]): 读出指定大小的内容,默认为读取所有。(小心内存爆炸)
  • readline(): 读出一行。
  • readlines(): 读出所有,返回值是是一个list。

写文件

with open('path/to/file', 'w', encoding='utf8) as f:    
   for item in sql_list:
       f.write(item+';\n')
  • write(): 写入文件,可以是字符串。

小结

python通过open()函数打开的文件对象进行文件操作
打开文件的时候注意打开的模式
使用with...as...是推荐的

编码方式:

查看文本的编码方式:  注意python2 和python3 定义的字符串的编码方式是不同的,就是一个坑货!请参考:https://blog.csdn.net/zz153417230/article/details/80575927

# 需要提前安装  pip install chardet
import chardet
with open("test1.txt","rb") as f:
    print(chardet.detect(f.read())) # 是依据字符检测的结果,很可能准,



import chardet  
s1="hello"
s2=s1.encode("utf-8") #ascii
print(type(s2))
print(chardet.detect(s2)) #输出ascii 

import chardet  
s1="hello中国"
s2=s1.encode("utf-8") #ascii
print(type(s2))
print(chardet.detect(s2)) #ascii


# 检测为什么还是ascii编码??  寒老师说:detect 是根据字面检测的,
# 有时候是因为纯英文它做了内存优化,太复杂,不要抠底层,工作用用utf-8就可以了
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值