python中的文件I/O

python文件I/O

使用Path获取目录

from pathlib import *

# 获取当前目录
p = Path('.')
# 遍历当前目录下所有文件和子目录
for x in p.iterdir():
    print(x)
# 获取上一级目录
p = Path('../')
# 遍历上级目录下的所有文件和子目录
for x in p.iterdir():
    print(x)
# 获取上级目录及其所有子目录下的.py文件
for x in p.glob('**/*.py'):
    print(x)

使用os.path操作目录

import os
import time

# 获取文件绝对路径
print(os.path.abspath("os.path.py"))
# 获取目录
print(os.path.dirname('python/test/os.path.py'))
# 判断文件是否存在
print(os.path.exists('python/test'))
# 获取文件大小
print(os.path.getsize('os.path.py'))
# 判断是否为文件
print(os.path.isfile('os.path.py'))
# 判断是否为目录
print(os.path.isdir('python/test'))
# 判断文件是否相同
print(os.path.samefile('os.path.py','./os.path.py'))

# 获取文件最后一次访问时间
print(time.ctime(os.path.getatime('os.path.py')))
# 获取文件最后一次修改时间
print(time.ctime(os.path.getmtime('os.path.py')))
# 获取文件创建时间
print(time.ctime(os.path.getctime('os.path.py')))

使用fnmatch处理文件名匹配

import fnmatch
from pathlib import *

for file in Path('.').iterdir():
    if fnmatch.fnmatch(file,'*.py'):
        print(file)
使用fnmatch.filter()进行列表过滤
names = ['a.py','b.py','c.py','d.py']
sub = fnmatch.filter(names,'[ac].py')
print(sub)	# ['a.py', 'c.py']
使用famatch.translate()转化为正则表达式
print(fnmatch.translate('?.py'))	# (?s:.\.py)\Z

使用open()打开文件

f = open('./os.path.py')
print(f.encoding)   # UTF-8
print(f.name)   # ./os.path.py
print(f.mode)   # r
print(f.closed) # False

读取文件

默认读取全部文件内容
f = open("os.path.py",'r',True)

print(f.read())
显式指定字符集
f = open("os.path.py",'r',True,'utf-8')

print(f.read())
按字节或字符读取
f = open("os.path.py",'r',True)

while True:
    ch = f.read(1)
    if not ch : break
    print(ch,end='')

f.close()
f = open("os.path.py",'r',True)

try:
    while True:
        ch = f.read(1)
        if not ch : break
        print(ch,end='')
finally:
    f.close()
以二进制的方式读取
f = open("os.path.py",'rb',True)
print(f.read().decode('utf-8'))
f.close()
按行读取文本文件
逐行读取
f = open("os.path.py",'r',True,'utf-8')
while True:
    line = f.readline()
    if not line : break
    print(line,end='')
f.close()
一次读取所有行
f = open("os.path.py",'r',True,'utf-8')

for l in f.readlines():
    print(l,end='')

f.close()
使用fileinput读取多个输入流
import fileinput

for line in fileinput.input(files=('open-test.py','Path-test.py')):
    # 输出文件名,当前行在当前文件中的行号,当前行内容
    print(fileinput.filename(),fileinput.filelineno(),line,end='')

fileinput.close()
文件迭代器
文件对象本身是可遍历的,可以使用for-in循环遍历文件内容
f = open('os.path.py','r',True,'utf-8')

for line in f:
    print(line,end='')

f.close()
将文件对象转化为list对象
print(list(open('os.path.py','r',True,'utf-8')))
使用with语句自动关闭文件
with open('os.path.py','r',True,'utf-8') as f:
    for line in f:
        print(line,end='')

写文件

文件写入模式
r+ w w+ a a+都可以写入文件,r+ w w+打开文件时,文件指针位于文件开头处;a a+打开文件时,文件指针位于文件结尾处;w w+写入文件时会立即清空文件内容
文件指针

test.txt文件

abcdefghijklmnopqrstuvwsyz
f = open("test.txt")
# 判断文件指针位置
print(f.tell()) # 0
# 将文件指针移动到第3处
f.seek(3)
print(f.read(1)) # d
write()写入内容
以字符串方式写入
import os
f = open('test.txt','w+')
f.write('python' + os.linesep)
# writelines()写入多个字符串
f.writelines(('aaaaaa' + os.linesep,
             'bbbbbbbb' + os.linesep
              ))

此时的test.txt文件

python
aaaaaa
bbbbbbbb
以二进制方式写入
import os
f = open('test.txt','wb+')
f.write(('python' + os.linesep).encode('utf-8'))
f.writelines((('aaaaaa' + os.linesep).encode('utf-8'),
             ('bbbbbbbb' + os.linesep).encode('utf-8')
              ))

目录函数

创建目录
import os

# 获取当前目录
print(os.getcwd())

# 在当前目录下创建子目录
path = 'test_dir'
os.mkdir(path)

# 递归创建目录
path2 = 'a/b/c'
os.makedirs(path2)

删除目录
import os

# 删除path对应的空文件,若目非空,则抛出OSError异常
path = 'test_dir'
os.rmdir(path)

# 删除非空文件
os.remove('test.txt')

# 递归删空目录
path = 'a/b/c'
os.removedirs(path)
目录重命名
import os

# 目录重命名
path = 'd'
os.rename(path,'e')

# 递归重命名目录
path2 = 'a/b'
os.renames(path2,'a/f')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值