Python–cookbook–5.文件与IO

Python–cookbook–5.文件与IO

导入对应模块

import array
import io
import functools
import os
import mmap
import time
import glob
import fnmatch
import sys
import pickle

读写文本数据

# rt模式下,python在读取文本时会自动把\r\n转换成\n
# read:读所有  readline:读一行  readlines:读所有列表保存
# with open('test.txt', 'rt') as f:
    # data = f.read()
    # print(data)
    # for line in f:
    #     print(line, end='')
# write(str 或 bytes):写入字符串或字节串。只有以二进制模式(b 模式)打开的文件才能写入字节串。
# writelines(可迭代对象):写入多个字符串或多个字节串
# with open('somefile.txt', 'wt') as f:
#     f.write('123\n')
#     f.write('456\n')
#     f.writelines(['789\n', '000\n'])
# 常见的编码是 ascii, latin-1, utf-8 和 utf-16
# 不使用with,需要手动关闭文件

打印输出到文件中

# with open('somefile.txt', 'wt') as f:
#     print('Hello World! Yeah! HaHa', file=f)

使用分割符或行终止符打印

row = ('ACME', 50, 91.5)
print(*row, sep=';')

读写字节数据 rb wb

# with open('somefile.bin', 'wb') as f:
#     f.write(b'Hello World')
# 从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作
# with open('somefile.bin', 'rb') as f:
#     data = f.read(16)
#     text = data.decode('utf-8')
#     print(text)
# with open('somefile.bin', 'wb') as f:
#     text = 'Hello World!!!'
#     f.write(text.encode('utf-8'))

文件不存在才能写入 x模式替代w模式

# with open('somefile', 'xt') as f:
#     f.write('Hello\n')

# 字符串的I/O操作
# 操作类文件对象的程序来操作文本或二进制字符串
# 使用 io.StringIO() 和 io.BytesIO() 类来创建类文件对象操作字符串数据
s = io.StringIO()
s.write('Hello World\n')
print('This is a test', file=s)
u = s.getvalue()  # 'Hello World\nThis is a test\n'

读写压缩文件

# gzip bz2

固定大小记录的文件迭代

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

读取二进制数据到可变缓冲区中

def read_into_buffer(filename):
    buf = bytearray(os.path.getsize(filename))
    with open(filename, 'rb') as f:
        f.readinto(buf)
    return buf

内存映射的二进制文件

def memory_map(filename, access=mmap.ACCESS_WRITE):
    size = os.path.getsize(filename)
    fd = os.open(filename, os.O_RDWR)
    return mmap.mmap(fd, size, access=access)

文件路径名的操作

path = r'E:\###技术栈学习###\python cook book\5.文件与IO.py'
print(os.path.basename(path))
print(os.path.dirname(path))
print(os.path.join('tmp', 'data', os.path.basename(path)))
print(os.path.splitext(path))

测试文件是否存在

print(os.path.exists('5.文件与IO.py'))
print(os.path.exists('/tmp/spam'))
# 测试文件类型
print(os.path.isfile('5.文件与IO.py'))  # 文件
print(os.path.isdir(r'E:\###技术栈学习###\python cook book'))  # 目录
# 绝对路径
print(os.path.realpath('5.文件与IO.py'))
# 获取文件大小和修改日期
print(os.path.getsize('5.文件与IO.py'))
print(time.ctime(os.path.getmtime('5.文件与IO.py')))
# 获取文件夹中的文件列表
print(os.listdir(r'E:\###技术栈学习###\python cook book'))

文件名的匹配

# glob fnmatch模块
pyfiles = glob.glob('*.py')
print(pyfiles)
pyfiles2 = [name for name in os.listdir(r'E:\###技术栈学习###\python cook book')
            if fnmatch.fnmatch(name, '*.py')]
print(pyfiles2)

忽略文件名编码

print(sys.getfilesystemencoding())

打印不合法的文件名

# for name in files:
#     try:
#         print(name)
#     except UnicodeEncodeError:
#         print(bad_filename(name))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柴寺仓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值