Python 文件操作

打开

相对路径:相对于哪一个目录下面的指定文件。
python文件所在目录。

r

如果文件不存在则会报错。
以只读的方式打开文件,这是默认模式。
文件的指针将会放在文件的开头。

f = open('a.txt','r')

content = f.read()
print(content)

f.close()

w

以只写的方式打开文件
文件的指针将会放在文件的开头,所以写入的新内容会覆盖
文件不存在,会自动创建一个新文件。

f = open('a.txt','w')
f.write('123456')
f.close()

a

以追加的方式(只写)打开文件
文件的指针会放在文件的结尾,所以写入的内容会增加文件末尾
文件不存在,会自动创建一个新文件。

f = open('a.txt','a')
f.write('123456')
f.close()

b

rb
wb
ab
以二进制格式进行文件读写操作,图片,视频,音频。

fromFile = open('xx.jpg', 'rb')
fromContent = fromFile.read()
fromFile.close()

toFile = open('xx2.jpg', 'wb')
content = fromContent[0:len(fromContent) // 2]
toFile.write(content)
toFile.close()

+

以读写模式进行打开。
其他特性基本和+前面的模式一致。

r+

f = open('a.txt', 'r+')

content = f.read()
print(content)

f.write('888888')

f.close()

xxx
123456

a.txt:
xxx
123456888888

读写

定位

f.seek(偏移量, [0,1,2]) 定位指针位置
0:开头,默认
1:当前位置
2:文件末尾
注意文本文件的操作模式下(不带b),只能写0.如果想要1/2,必须在二进制文件操作模式下

f.tell() 查看当前指针位置

a.txt
12345678

f = open('a.txt', 'r')

print(f.tell())
f.seek(2)
print(f.tell())
content = f.read()
print(content)
print(f.tell())

f.close()

0
2
345678
8

f.read(字节数)

字节数默认是文件字节长度

f.readline([limit])

读取一行数据,limit限制的最大字节数

a.txt
1
2
3
4
5
6

f = open('a.txt', 'r')

print('-', f.tell())
content = f.readline()
print(content, end='')

print('-', f.tell())
content = f.readline()
print(content, end='')

print('-', f.tell())
content = f.readline()
print(content, end='')

f.close()

- 0
1
- 3
2
- 6
3

f.readlines()

会自动将文件转换行符进行处理,将处理好的每一行组成一个列表返回

f = open('a.txt', 'r')

content = f.readlines()
print(content)

f.close()

[‘1\n’, ‘2\n’, ‘3\n’, ‘4\n’, ‘5\n’, ‘6\n’]

for in

f 为迭代器

import collections

f = open('a.txt', 'r')

print(isinstance(f, collections.Iterator))

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


f.close()

d:\python\python\test3.py:5: DeprecationWarning: Using or importing the ABCs from ‘collections’ instead of from ‘collections.abc’ is deprecated, and in 3.8 it will stop working
print(isinstance(f, collections.Iterator))
True
1
2
3
4
5
6

判定是否可读

f = open('a.txt', 'r')

if f.readable():
    content = f.readlines()
    for i in content:
        print(i, end='')

f.close()

1
2
3
4
5
6

注意

一般文件特别大的时候,可以使用reafline 或 for in,按行加载,可节省内存,但相比于其他两个读取方式,性能较低。
其他两个方式,一次性读取文件所有内容,虽然占用内存,但处理性能比较高。

f.write(‘内容’)
返回值是写入的字节长度

判定是否可写 f.writable()

关闭

f.close()
可以释放系统资源,会立即清空缓冲区的数据内容到磁盘文件

f.flush()
立即将缓冲区写入磁盘

重命名

os.rename()
修改单级目录/文件名称
os.renames()
修改多级目录/文件名称

import os
# 修改文件
os.rename('a.txt', 'bb.txt')
# 修改目录
os.rename('first', 'one')

# os.renames()
os.renames('one/one.txt', 'two/two.txt')

删除

删除文件

os.remove()
文件不存在会报错

删除目录

os.rmdir()
不能递归删除目录,如果文件夹非空,会报错
os.removedirs()
可以递归删除目录,如果文件夹非空,会报错

import os

os.rmdir('two')

os.removedirs('one/one2')

创建文件夹

os.mkdir(‘文件夹名称’[, mode] )
不能递归创建
数字模式权限

import os

os.mkdir('a')
os.mkdir('a/b')
os.mkdir('b', 0o777)

获取当前目录

os.getcwd()

改变默认目录

os.chdir(‘a’)

获取目录内容列表

import os

# 当前目录
os.listdir('./')
# 上一层目录
os.listdir('../')

文件的复制

大文件复制:

import os

os.chdir('files')

source_file = open('d.txt', 'r', encoding='utf-8')
dst_file = open('d_bat.txt', 'a', encoding='utf-8')

while True:
    content = source_file.read(1024)
    if len(content) == 0:
        break
    dst_file.write(content)


source_file.close()
dst_file.close()

文件分类,并生成文件清单

按照文件名后缀,划分到不同的文件夹。
生成.txt格式的文件清单

import os
import shutil

path = 'files'
if not os.path.exists(path):
    exit()

os.chdir(path)
file_list = os.listdir('./')

print(file_list)

# 遍历所有的文件
for file_name in file_list:
# 分解文件的后缀名
    # 获取最后一个.的索引位置
    index = file_name.rfind('.')
    if index == -1:
        continue
    # 根据这个索引位置,当作起始位置,来截取后续的所有字符串内容
    extension = file_name[index + 1:]
    print(extension)

# 查看是否存在同名的目录
    if not os.path.exists(extension):
        # 创建目录
        os.mkdir(extension)
    # 移动文件
    shutil.move(file_name, extension)


def listFilesToTxt(dir, file):
    # 列举出文件夹下的所有文件夹及子文件
    file_list = os.listdir(dir)
    for file_name in file_list:
        new_fileName = dir + '/' + file_name
        if os.path.isdir(new_fileName):
            # print(new_fileName)
            file.write(new_fileName + '\n')
            listFilesToTxt(new_fileName, file)
        else:
            # print('\t' + file_name)
            file.write('\t' + file_name + '\n')
    # print('')
    file.write('\n')

f = open('../list.txt','a')
listFilesToTxt('./', f)
f.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值