《Python从小白到大牛》学习笔记基础部分-第五篇(基础部分最终章)

"""
文件操作与管理:
python中对文件的读写是通过文件对象file object实现的,python的文件对象也称为类似文件对象file-like object或流stream,文件对象可以是实际的磁盘文件
也可以是其他存储或通信设备。如:内存缓冲区、网络、键盘和控制台等。
之所以称为类似文件对象,是因为python提供一种类似文件操作的API(如read() or write()方法)实现对底层资源的访问

文件操作:文件操作主要包括对文件内容的读写操作,这些操作通过文件对象实现,通过文件对象可以读写文本文件和二进制文件
打开文件,open(),python的内置函数,会返回一个文件对象,
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file参数要打开的文件,可以是字符串或者整数,如果file是字符串表示文件名,文件名可以是相对当前目录的路径,也可以是绝对路径,如果file是整数表示文件描述符
,文件描述符指向一个一个已经打开的文件
mode参数设置文件打开模式,b,t是打开的文件类型,二进制文件以及文本文件,rb, wb, xb, ab, rt, wt因为t是默认模式因此可以省略t,r, w, a, x
r 只读模式打开文件(默认)
w 写入模式打开文件,会覆盖已经存在的文件
x 独占创建模式,文件不存在时创建并以写入模式打开,如果文件已存在则抛出异常fileExistsError
a 追加模式,如果文件存在则写入内容追加到文件末尾
b 二进制模式
t 文本模式(默认)
+ 更新模式
+必须与r,w,x,a组合来设置文件的读写模式,r+,w+,rb+等等,功能和原本的好像差别不大

buffering设置缓冲区策略,默认值-1,系统会自动设置缓冲区通常是4096或8192字节,buffering=0时关闭缓冲区,此时数据直接写入文件中,这种模式主要应用与二进制文件
的写入操作,当buffering>0时,buffering用来设置缓冲区字节大小。

encoding用来指定打开文件时的文件编码,主要用于文本文件的打开,
error参数用来指定编码发生错误时如何处理

newline参数设置换行模式

closefd和opener参数,这两个参数在file参数为文件描述符时使用。closefd为True时,文件对象调用close()方法关闭文件,同时也会关闭文件描述符所对应的文件
opener参数用于打开文件时执行的一些加工操作,opener参数执行一个函数,该函数返回一个文件描述符
文件描述符为是一个整数值,对应到当前程序已经打开的一个文件,例如标准输入文件描述符是0,标准输出文件描述符是1,标准错误文件描述符是2,打开其它文件的文件描述符依次是3,4,5等数字

关闭文件可以用close()函数,但是推荐使用with as语句

文本文件读写:
read(size=-1):从文件中读取字符串,size限制最多读取的字符数,-1表示没有限制,读取全部内容
readline(size=-1):读取到换行符或文件尾并返回单行字符串,如果已经到了文件尾,则返回一个空字符串,size是限制读取的字符数,size=-1时没有限制
readlines(hint=-1):读取文件数据到一个字符串列表中,每一行数据是列表的一个元素,hint是限制读取的行数,hint=-1时没有限制。
write(s):将字符串s写入文件,并返回写入的字符数
writelines(lines):向文件中写入一个列表,不添加行分隔符,因此通常为每一行末尾提供行分隔符
flush():刷新写缓冲区,数据会写入到文件中

"""

f = open('test.txt', 'w+')
f.write('World')             #写入World

f = open('test.txt', 'r+')
f.write('Hello')             #写入Hello,覆盖前面的World,r+就是可读和可写

f = open('test.txt', 'a')
f.write(' ')                #添加空格

fname = r'E:\python练习\project1\test.txt'
f = open(fname, 'a+')
f.write('World')              #添加World

with open(fname, 'r') as f:
    content = f.read()
    print(content)

with open(fname, 'r', encoding='utf-8') as f:
    lines = f.readline()
    print(lines)
    copy_fname = 'copy.txt'
    with open(copy_fname, 'w', encoding='utf-8') as copy_f:
        copy_f.writelines(lines)
        print('文件复制成功!')

"""
os模块:
文件对象输入Python的io模块
通过Python程序管理文件或目录,如删除文件、修改文件名、创建目录、删除目录和遍历目录等可以通过python的os模块实现。
os.rename(src, dst):修改文件名,src是源文件,dst是目标文件,它们都可以是相对当前路径或绝对路径表示的文件
os.remove(path):删除path所指的文件,如果path是目录,则会引发OSError
os.mkdir(path):创建path所指的目录,如果目录已经存在,则会引发FileExistsError
os.rmdir(path):删除path所指的目录,如果目录非空,则会引发OSError.
os.walk(top):遍历top所指的目录树,自顶向下遍历目录树,返回值是一个三元组(目录路径,目录名列表,文件名列表)
os.listdir(dir):列出指定目录中的文件和子目录。
os.curdir属性:获得当前目录
os.pardir属性:获得当前父目录。
"""

import os

f_name = 'test.txt'
copy_fname = 'copy.txt'

with open(f_name, 'r') as f:
    b = f.read()
    with open(copy_fname, 'w') as copy_f:
        copy_f.write(b)

try:
    os.rename(copy_fname, 'copy2.txt')
except OSError:
    os.remove('copy2.txt')

print(os.listdir(os.curdir))
print(os.listdir(os.pardir))

try:
    os.mkdir('subdir')
except OSError:
    os.rmdir('subdir')

for item in os.walk('.'):    #返回当前目录树下所有目录和文件
    print(item)

"""
os.path模块:提供对路径、目录和文件等进行管理的函数
os.path.abspath(path):返回path的绝对路径
os.path.basename(path):返回path路径的基础名部分,如果path指向的是一个文件,则返回文件名,如果指向的是一个目录,则返回最后目录名
os.path.dirname(path):返回path路径中目录部分
os.path.exists(path):判断path文件是否存在
os.path.isfile(path):如果path是文件,则返回true
os.path.isdir(path):如果path是目录,则返回true
os.path.getatime(path):返回最后一次的访问时间,返回值是一个UNIX时间戳(1970年1月1日00:00:00以来的总秒数),如果文件不存在或者无法访问则引发OSError
os.path.getmtime(path):返回最后修改时间,剩下部分同上
os.path.getctime(path):返回创建时间,剩下部分同上
os.path.getsize(path):返回文件大小,以字节为单位,其他同上
"""
import os.path
from datetime import datetime

f_name = 'test.txt'
af_name = r'E:\python练习\project1\test.txt'

#返回path的绝对路径
print('绝对路径:' + os.path.abspath(af_name))

#返回路径中基础名部分
print('基础名部分:' + os.path.basename(af_name))

#返回path路径中目录部分
print('目录部分:' + os.path.dirname(af_name))

#返回文件大小
print('文件大小:' + str(os.path.getsize(af_name)) + '字节')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值