python文件操作

Posted jeancheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python文件操作相关的知识,希望对你有一定的参考价值。

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

使用python的with语句

实现在处理文件时,无论是否抛出了异常,都能保证with语句执行完毕后关闭已打开的文件

with open(file, mode=\'r\') as target:

with-body

 

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

file: 必需,文件路径(相对或者绝对路径)。

mode: 可选,文件打开模式

buffering: 设置缓冲

encoding: 一般使用utf8

errors: 报错级别

newline: 区分换行符

closefd: 传入的file参数类型

opener:

mode模式参数值

 

以二进制形式打开文件

使用open函数不仅可以以文本的形式打开文件,而且可以以二进制形式打开非文本文件,如图片、音频、视频文件等

 

>>> file=open(\'test.txt\',\'r\')

>>> file

<_io.TextIOWrapper name=\'test.txt\' mode=\'r\' encoding=\'cp936\'>

 

>>> file.read()

\'123456789\\n234567890\\n345678901\'

 

>>> file1=open(\'test.jpg\',\'rb\')

>>> file1

<_io.BufferedReader name=\'test.jpg\'>

创建的是一个bufferreader对象。该对象生成后,可以再应用其他的第三方模块进行处理。

 

打开文件时指定编码方式

open函数打开文件时,默认采用GBK编码,当打开的文件不是GBK编码时,会抛出异常

通过添加encoding=\'编码方式\'解决

>>> file = open(\'utf8.txt\',\'r\')

>>> file.read()

Traceback (most recent call last):

File "<pyshell#1>", line 1, in <module>

file.read()

UnicodeDecodeError: \'gbk\' codec can\'t decode byte 0xbf in position 2: illegal multibyte sequence

>>> file.close()

以utf-8编码打开

>>> file = open(\'utf8.txt\',\'r\',encoding=\'utf-8\')

>>> print(file.read())

123

>>> file.close()

文件内容的读取

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

>>> with open(\'utf8.txt\',\'r\',encoding=\'utf-8\') as f:

    f.read()

\'\\ufeff123\\n456\\n789\'

file.readline([size])

读取整行,包括 "\\n" 字符。

>>> with open(\'utf8.txt\',\'r\',encoding=\'utf-8\') as f:

    f.readline()

\'\\ufeff123\\n\'

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

>>> with open(\'utf8.txt\',\'r\',encoding=\'utf-8\') as f:

    f.readlines()    

[\'\\ufeff123\\n\', \'456\\n\', \'789\']

文件迭代器

>>> with open(\'utf8.txt\',\'r\',encoding=\'utf-8\') as f:

    for line in f:

        print(line,end=\'\')

123

456

789

总结

 

像read(),readlines()这种一次性全部读取的方式在大多数情况下并非良方

如果是一个大文件,它会占用大量内存,甚至可能会因为内存不足而读取失败。

但并非必须要选择for line in open(\'a.txt\')的方式,因为有些时候必须加载整个文件才能进行后续的操作,比如要排序文件,必须要拥有文件的所有数据才能进行排序。而且对于小文件来说,一次性读取到一个列表中操作起来可能会更加方便,因为列表对象有很多好用的方法。所以,不能一概而论地选择for line in open(\'a.txt\')。

 

读取出来的内容,都带行尾的换行符,可以使用字符串的strip()方法去除。

文件内容的写入

    

file.write(str)

 

将字符串写入文件,返回的是写入的字符长度。不会自动加入换行符

>>> with open(\'test.txt\',\'w\') as f:

    f.write(\'line1\')

    f.write(\'line2\'+\'\\n\')

5

6

>>> with open(\'test.txt\',\'r\') as f:

    f.read()

\'line1line2\\n\'

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

>>> data = [\'line1\',\'line2\',\'line3\']

>>> with open(\'test.txt\',\'w\') as f:

    f.writelines(data)

>>> with open(\'test.txt\',\'r\') as f:

    f.read()

\'line1line2line3\'

以上是关于python文件操作的主要内容,如果未能解决你的问题,请参考以下文章

Python文件操作

Python文件操作:文件的打开关闭读取写入

python的文件操作

Python文件操作

Python--文件操作和集合

Python解析Python中的文件操作