Python 学习笔记(07)文件
文章目录
7.1 文件对象
在python中,文件只是【连续的字节序列】。文件对象用来访问普通磁盘文件或类文件(如打开URL读取的Web界面)。
7.1.1 相关内建函数(BIF)
file = open("filepath", "access_mode")
"""
open()函数提供了初始化输入/输出操作的【通用接口】,结果将返回一个文件对象或引发一个错误。
参数access_mode为拓展打开方式:
f = open("f.txt", "r") # 以只读方式打开文件,文件的指针将会放在文件的开头
f = open("f.txt", "rb") # 以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头
f = open("f.txt", "r+") # 打开一个文件用于读写,文件指针将会放在文件的开头
f = open("f.txt", "w") # 打开一个文件只用于写入,如果该文件已存在则打开文件,原有内容会被删除;如果该文件不存在 创建新文件
f = open("f.txt", "w+") # 打开一个文件用于读写,如果该文件已存在则打开文件,原有内容会被删除;如果该文件不存在 创建新文件
f = open("f.txt", "a") # 打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾;如果该文件不存在 创建新文件进行写入
f = open("f.txt", "a+") # 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾;如果该文件不存在 创建新文件用于读写
"""
7.1.2 文件函数
# 读取文件相关
file.read(size) # 每次读取size字节大小的内容
file.readline() # 每次读取一行内容
file.readlines() # 读取全部内容,结果为列表,列表中的元素为每行内容
file.xreadlines() # 读取全部内容,结果为生成器
# 写入文件相关
file.write() # 写入一个字符串
file.writelines() # 写入一个字符串或列表,注意该函数并不会主动分行,需要在每个字符串结尾添加换行符
# 文件定位相关
file.seek(offset,whence) # offset:偏移量,即偏移(略过)多少个字符开始读取,默认为0;
# whence:0->从头开始读取,1->当前位置继续读取,2->末尾开始读取
file.tell() # 返回文件指针当前位置
# 其余操作
file.closed() # 关闭文件,如果在打开后没有【显式】关闭文件可能会丢失【缓冲区数据】
file.flush() # 将【缓冲区数据】立刻写入文件
file.truncate(size) # 用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符,截断之后 size 后面的所有字符被删除。
"""
文件读写时可能产生IOError,一旦出错就不会调用file.close()
为确保正确关闭文件,建议使用with语句,with 的作用就是自动调用close()方法:
with open("filepath", "access_mode") as file:
print(file.read())
"""
7.2 文件迭代
文件自身作为【迭代器】,即可迭代对象。
# 直接使用for循环迭代
try:
for line in file:
print(line) # line带"\n"
finally:
file.close()
# 使用file.next()
for index in range(5):
line = file.next()
7.3 标准文件对象
包括【sys.stdin】、【sys.stdout】以及【sys.stderr】
7.3.1 标准输入 sys.stdin
输入来自键盘,对应 input()
。input()
从【sys.stdin】中接受输入。
sys.stdin.readline()
只输入(获取)一行,sys.stdin.readlines()
会将标准输入全部获取,包括末尾的’\n’,所以一般会在末尾加上 .strip()
或 .strip(“\n”)
去掉末尾的换行符
import sys
line = sys.stdin.readline().strip() #末尾加.strip() ,去掉了换行符
for i in range(len(line)): #len(line)=3
print(line[i] + "hello")
7.3.2 标准输出 sys.stdout
输出到显示器,对应的操作是 print()
;需要定义一个write对象,告诉sys.stdout去哪儿写。print()
输出到【sys.stdout】。
sys.stdout.write ()
从键盘读取 sys.stdout.write ()
输入的内容
import sys
sys.stdout.write("johnson")
for i in range(3):
sys.stdout.write("johnson")
Out:
johnson
johnson
johnson
7.3.3 标准错误 sys.stderr
标准错误输出(sys.stderr),输出到显示器。
import sys
sys.stderr.write("error\n")
7.4 分隔符
不同的操作系统具有不同的行分隔符以及路径分隔符。
7.4.1 行分隔符
1) POSIX (Unix/ MacOS): 【\n】
2) DOS/ Windows: 【 \r \n】
3) 旧版MacOS : 【 \r】
7.4.2 路径分隔符
1) POSIX (Unix/ MacOS): 【/】
2) DOS/ Windows: 【\】
3) 旧版MacOS : 【 :】
7.4.3 import os
为方便进行跨平台开发,python的os库中包含了一部分属性用于确定分隔符以免产生歧义。
import os
os.linesep # 行分隔符
os.sep # 路径名分隔符
os.pathsep # 路径分隔符
os.curdir # 当前工作目录
os.pardir # 父目录
部分属性用于确定分隔符以免产生歧义。
import os
os.linesep # 行分隔符
os.sep # 路径名分隔符
os.pathsep # 路径分隔符
os.curdir # 当前工作目录
os.pardir # 父目录
7.5 文件路径
文件含有两部分重要属性:【文件名】以及【路径】。文件名为每个文件指定的名称,而路径代表文件在计算机上的存储位置。
7.5.1 自动添加路径分隔符
该函数可以用来连接文件名以及路径,并会根据不同的操作系统自动添加对应的路径分隔符。
import os
print(os.path.join('C:\\User\\User', filename))
7.5.2 相关函数
绝对路径:从根文件夹开始,Windows中以盘符名开头,POSIX中以【/】为根文件夹;
相对路径:文件相对于当前工作目录的位置,格式为【.\filename】
import os
os.getcwd() # 获得当前工作路径
os.chdir(newPath) # 切换至目标工作路径
os.path.abspath(path) # 相对路径转换为绝对路径,常用 os.path.abspath(__file__)
os.path.relpath(path, start) # 返回从 start 路径到 path 的相对路径,可以用于截取某一段路径
os.path.dirname(path) # 返回【路径】部分
os.path.basename(path) # 返回【文件名】部分
os.path.split(path) # 元组形式存储【路径】及【文件名】
os.path.exists(path) # 检查路径是否存在