欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python文件操作总结

程序员文章站 2022-05-12 16:14:32
...

文件操作模式

r只读,r+读写,不创建,若文件不存在,报错

w新建只写,w+新建读写,二者都会将文件内容清零

a新建附加写,a+新建附加读写

python文件操作总结

 

File对象方法

file.close()

关闭文件。关闭后文件不能再进行读写操作。

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

file.next()

返回文件下一行。python3不支持,使用next(file)

file.read([size])

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

file.readline([size])

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

file.readlines([sizehint])

读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

file.seek(offset[, whence])

设置文件当前位置,whence为0代表从文件头部开始计算偏移,为1代表从当前位置开始,为2从尾部开始。

在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置

file.tell()

返回文件当前位置,返回的是字节数

file.truncate([size])

截取文件,截取的字节通过size指定,默认为当前文件位置,截断之后 size 后面的所有字符被删除。

file.write(str)

将字符串写入文件,返回的是写入的字符长度

file.writelines(sequence)

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

file.writable,file.readable,file.seekable

是否能读,是否能写,是否能够移动指针位置

 

OS对象方法

os.rename(src, dst)

重命名文件或目录,从 src 到 dst

os.remove(path)

删除路径为path的文件。如果path 是一个文件夹,将抛出OSError

os.renames(old, new)

递归地对目录进行更名,也可以对文件进行更名

os.mkdir(path[, mode])

以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)

os.makedirs(path[, mode])

递归文件夹创建函数。

os.chdir(path)

改变当前工作目录

os.getcwd()

返回当前工作目录

os.rmdir(path)

删除path指定的空目录,如果目录非空,则抛出一个OSError异常

os.removedirs(path)

递归删除目录

os.listdir(path)

返回path指定的文件夹包含的文件或文件夹的名字的列表,只包括子节点。

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

输出在文件夹中的文件名通过在树中游走,向上或者向下

更多http://www.runoob.com/python3/python3-os-file-methods.html

 

os.path

os.path.abspath(name) 获得绝对路径

os.path.basename(path) 返回文件名

os.path.commonpath(path)返回所有path的公共路径

os.path.commonprefix(list)返回所有path的公共前缀

os.path.dirname(path) 返回文件路径

os.path.exists() 函数用来检验给出的路径是否存在

os.path.getatime(path) 得到文件最后一次的访问时间access time

os.path.getctime(path) 得到文件最后一次的改变时间change time ,修改文件的属性改变mtime

os.path.getmtime(path) 得到指定文件最后一次的修改时间modification time,修改文件的内容改变mtime

os.path.getsize(name) 得到文件的大小

os.path.isabs(path) 测试参数是否是绝对路径

os.path.isdir(path)检验给出的路径是否为一个目录

os.path.isfile(path) 检验给出的路径是否为一个文件

os.path.islink(path)测试指定参数是否是一个软链接

os.path.ismount(path)测试指定参数是否是挂载点

os.path.join(path,name) 连接目录与文件名或目录

os.path.normcase(path) windows平台会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠

os.path.normpath(path) 规范path字符串形式

os.path.realpath(path)返回指定文件的标准路径,而非软链接所在的路径

os.path.samefile()测试两个路径是否指向同一个文件

os.path.sameopenfile()测试两个打开的文件是否指向同一个文件

os.path.split(path)  函数返回一个路径的目录名和文件名

os.path.splitdrive(path) 拆分驱动器和路径

os.path.splitext()  分离文件名与扩展名

 

shutil

shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件

shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录

shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在

shutil.move("oldpos","newpos") 移动

shutil.rmtree("dir") 空目录、有内容的目录都可以删

 

pickle 

pickle.dump(obj, file, [,protocol])将obj对象序列化存入已经打开的file中。

pickle.load(file)将file中的对象序列化读出。

pickle.dumps(obj[, protocol])将obj对象序列化为string形式,而不是存入文件中。

pickle.loads(string)从string中读出序列化前的obj对象。

 

实例

"""file常用方法测试"""
with open('t.txt', 'w') as f:
    f.write('12345\n')
    f.writelines(['111\n', '222'])

with open('t.txt', 'r') as f:
    print(f.readlines(2))  # ['12345\n']

with open('t.txt', 'rb') as f:
    f.seek(-2, 2)
    print(f.read())  # b'22'

# f.flush方法可以将缓冲区数据刷出去,不调用flush的话等缓冲区满或者调用close才真正写入文件
# 和以下代码效果相似,flush=False会等循环结束才打印所有的*,flush=True则一个个打印
for i in range(30):
    print('*', end='', flush=True)
    # sys.stdout.write('*')
    # sys.stdout.flush()
    time.sleep(0.1)

# 通过拷贝文件 间接实现修改文件的内容
f1 = open('t.txt', 'r', encoding='utf-8')
f2 = open('t2.txt', 'w', encoding='utf-8')
for i, line in enumerate(f1):
    if i == 1:
        line = line.strip() + 'lll'
    f2.write(line.strip() + '\n')
f2.close()
f1.close()

"""os对象方法"""
# 递归创建文件夹,递归删除文件夹
os.makedirs('test/test1')
os.removedirs('test/test1')

# 递归遍历指定目录,打印所有的文件路径
for root, dirs, files in os.walk('.'):
    for name in files:
        print(os.path.join(root, name))

"""pickle模块"""
with open('tt.txt', 'wb') as f:
    pickle.dump([1, 2], f)
    pickle.dump({1: '2'}, f)

with open('tt.txt', 'rb') as f:
    print(pickle.load(f))  # [1, 2]
    print(pickle.load(f))  # {1: '2'}

s = pickle.dumps([1, 2])
print(s)  # b'\x80\x03]q\x00(K\x01K\x02e.'
print(pickle.loads(s))  # [1, 2]