Python从门到精通:文件处理-01-文件I/O

Posted 生而为人我很遗憾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python从门到精通:文件处理-01-文件I/O相关的知识,希望对你有一定的参考价值。

一、文件读写

文件读取需要注意三个问题:1、with上下文环境;2、换行符;3、编码(编码可用sys.gefdefaultencoding()取得系统默认编码)。如果想绕过文件编码层可直接访问buffer属性如 sys.stduout.buffer.write();

1.1、读写文本文件

open中有几种模式【文件格式+打开方式】,文件格式:文本-t,二进制-b,压缩文件-t。打开方式:r-读,w-写。

file_name = test.txt #默认的是读当前目录下的文件
"""读取文本"""
with open(file_name, rt) as f:
f.read()

#文件有可能存在,所以需要用这种方式判断一下
import os
if not os.path.exists(file_name):
with open(file_name, wt) as f:
f.write(Hello,I am a test.\\n)
else:
print(fFile file_name already exists!)

1.2、读写二进制文件

#二进制写法
b = bHello World
print(fbinary object b[0] = b[0])
#二进制的读写必须要进行解码和编码
with open(test.bin, rb) as f:
data = f.read(16)
text = data.decode(utf-8)

with open(test.bin, wb) as f:
text = Hello World
f.write(text.encode(utf-8))

import array
a_obj = array.array(i, [0, 0, 0, 0, 0, 0, 0, 0])
with open(test.bin, rb) as f:
# readinto会直接操作到内存中,但这个会和平台相关,注意使用
f.readinto(a_obj)

1.3、读写压缩文件

# gzip compression
import gzip
gz_file, bz_file = "giztext.gz", "bz.gz"
with gzip.open(gz_file, rt) as f:
text = f.read()
# bz2 compression
import bz2
with bz2.open(bz_file, rt) as f:
text = f.read()
# gzip compression
import gzip
with gzip.open(gz_file, wt) as f:
f.write(text)

# bz2 compression
import bz2
with bz2.open(bz_file, wt) as f:
f.write(text)
#设置压缩级别
with gzip.open(gz_file, wt, compresslevel=3) as f:
f.write(text)

1.4、文件编码

import urllib.request
import io
#二进制文件编码修改
url_res = urllib.request.urlopen(http://www.python.org)
f_test = io.TextIOWrapper(url_res, encoding=utf-8)
text_val = f_test.read()

#修改一个已经打开的文本模式的编码,先用detach()清除现在的编码层
import sys
print(fsys stdout encoding is: sys.stdout.encoding) #utf-8
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding=latin-1)
print(fsys stdout new encoding is: sys.stdout.encoding) #latin-1

#I/O系统示例,下面是一次I/O的完整过程
file_read = open(sample.txt,w)
print(ffile read: file_read) #<_io.TextIOWrapper name=sample.txt mode=w encoding=UTF-8>
print(ffile buffer: file_read.buffer) #<_io.BufferedWriter name=sample.txt>
print(ffile buffer raw: file_read.buffer.raw) #<_io.FileIO name=sample.txt mode=wb closefd=True>

1.5、读取定长文件

from functools import partial

RECORD_SIZE = 32

with open(somefile.data, rb) as f:
records = iter(partial(f.read, RECORD_SIZE), b)
for r in records:
pass

1.6、创建临时文件

from tempfile import TemporaryFile
#TemporaryFile:创建一个匿名的临时文件,不可以使用底层的一些方法
#NamedTemporaryFile:创建一个匿名的临时文件,同时可以使用底层的一些方法
with TemporaryFile(w+t) as f:
# Read/write to the file
f.write(Hello World\\n)
f.write(Testing\\n)

# Seek back to beginning and read the data
f.seek(0)
data = f.read()

f = TemporaryFile(w+t)
# Use the temporary file
f.close()

# ---------------------------------------------------
from tempfile import NamedTemporaryFile

with NamedTemporaryFile(w+t) as f:
print(filename is:, f.name)
pass

with NamedTemporaryFile(w+t, delete=False) as f:
print(filename is:, f.name)
pass

Python从门到精通:包装-03-对象处理

Python从门到精通:元类-01-元类

Python从门到精通:Grpc实现

Docker 从门到精通一 数据卷的使用

山东菏泽曹县牛批666我的宝贝!真正的零基础Web安全学习终极攻略(从门到入职系列)

通过 NFS 处理 GB 大小的文件时,如何在 Python 中优化文件 I/O?