Python 学习笔记
一、打开文件
- 通过 python 程序来对计算机的各种文件进行增删改查的操作,其实文件就是一个 IO (Input/Output)
1.1、使用 open()
函数:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- 参数 file: 要打开文件的名字(路径)
- 返回值: 返回了一个对象,这个对象就代表了当前打开的这个文件
# 如果目标文件和当前文件在同一级目录下, 则直接使用文件名即可
file_name = 'demo.txt'
# 如果目标文件和当前文件不在同一级目录下
# file_name = 'hello/demo.txt'
# 因为绝对路径中存在转义字符 '\*' C:\Users\ZC-WXB75\Desktop\demo.txt , 所以要修改一下:
# file_name = 'C:\\Users\\ZC-WXB75\\Desktop\\demo.txt'
# file_name = r'C:\Users\ZC-WXB75\Desktop\demo.txt'
# file_name = 'C:/Users/ZC-WXB75/Desktop/demo.txt'
file_obj = open(file_name)
print(file_obj)
1.2、使用 with... as ...
打开
file_name = 'demo.txt'
with open(file_name) as file_obj:
print(file_obj.read())
1.3、异常处理
# file_name = 'demo.txt'
file_name = 'abc.txt'
try :
with open(file_name) as file_obj:
print(file_obj.read())
except FileNotFoundError:
print(f'{file_name}文件不存在') # f '{变量名}' 用来传递变量(在前面数据类型有说过)
二、读取文件
2.1、文件简单读取
- 调用
open(
) 来打开一个文件,可以将文件分为 2 种类型
一种是: 纯文本文件(open()
的默认打开方式, 使用utf-8
等编码编写的文件)
另一种是: 二进制文件(音乐、图片…)
file_name = 'demo.txt'
try :
# with open(file_name) as file_obj: # 没有定义编码类型, 文件有中文会报错
with open(file_name,encoding='utf-8') as file_obj: # 可读中文
print(file_obj.read())
except FileNotFoundError:
print(f'{file_name}文件不存在')
2.2、读取大文件
read()
函数,它会默认将文件中内容全部读取出来。若文件很多 (如,几个T),这样就会对我们的内存等消耗较大read()
函数可以接收一个size
作为参数 (默认是 -1),该参数可以用来指定读取字符的数量
'''
葡萄美酒月光杯,
欲饮琵琶马上催.
醉卧沙场君莫笑,
古来征战几人回.
'''
file_name = 'demo.txt'
try:
with open(file_name, encoding='utf-8') as file_obj:
# help(file_obj.read) # 可看到 read 函数里有一个参数, 默认为 -1
# content = file_obj.read(8) # 可更改数值观察效果
# content = file_obj.read(9)
content = file_obj.read()
print(content)
print(len(content)) # 35 个, 每一行后面都有一个换行符(除最后一行)
except FileNotFoundError:
print(f'{file_name} 这个文件不存在!')
- 重复调用时,每一次读取都会接着上次的网下读取
file_name = 'demo.txt'
try:
with open(file_name, encoding='utf-8') as file_obj:
# help(file_obj.read)
content = file_obj.read(9)
content = file_obj.read(9)
content = file_obj.read(9)
print(content) # 输出:醉卧沙场君莫笑,
print(len(content))
except FileNotFoundError:
print(f'{file_name} 这个文件不存在!')
- 如果字符的数量小于指定的 size,则会读取所剩余的所有的内容
- 如果没有内容会返回一个‘’空串
FINAL:若是读大文件,我们可以使用循环来完成,进行固定数量字符的读取输出。
file_name = 'demo.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
c = 100 # 定义一个变量 指定每次读取的大小
while True: # 创建一个循环来读取文件的内容
content = file_obj.read(c)
if not content: # 检查是否读取到了内容
break # 没有内容,退出循环
print(content)
# print(content,end='') # 若不想自动换行, 可加 end=''
except FileNotFoundError:
print(f'{file_name}这个文件不存在!')
2.3、其他读取方法
readline()
函数可以读取每一行的内容
file_name = 'demo.txt'
with open(file_name, encoding='utf-8') as file_obj:
print(file_obj.readline())
print(file_obj.readline())
print(file_obj.readline())
print(file_obj.readline())
readlines()
函数可以把读取的每一行的内容,作为列表的元素,返回一个列表当中
file_name = 'demo.txt'
with open(file_name, encoding='utf-8') as file_obj:
file_objs = file_obj.readlines()
for i in file_objs:
print(i)
2.4、读取文件位置
tell()
函数检查当前读取的位置-
seek()
函数可以修改当前位置读取的函数
第一个参数: 注意,如果文件内容是中文,则参数要为 3 的倍数( 1 汉字 = 3 字母 )
第二个参数: 0 ,从头开始计算(默认);1 ,从当前位置计算;2 ,从最后位置计算
with open('demo.txt','r',encoding='utf-8') as file_obj:
print(file_obj.read(5))
file_obj.seek(3) # 第二个参数默认为 0
print(file_obj.read())
print('当前读取到了 --> ', file_obj.tell())
三、写入文件
3.1、写入文字
-
open()
函数的第二个参数mode
r: 表示只读 (open()
函数默认是 r )
w: 表示是可写 ,如果文件不存在它会创建一个文件,如果文件存在则会覆盖原文件的内容
a: 表示追加内容,即不会覆盖原来文件的内容
+: 为操作符增加功能
r+: 既可以读取,又可以写入
x: 用来创建新的文件,如果不存在就创建,如果存在就报错
file_name = 'demo.txt'
with open(file_name, 'a', encoding='utf-8') as file_obj:
file_obj.write('bbb')
file_obj.write('ccc\n') # 想换行, 可以加转义符
file_obj.write(str(11)) # 只能写入字符串(可写入整数验证)
file_name = 'demo.txt'
with open(file_name, 'r+', encoding='utf-8') as file_obj:
file_obj.write('ok')
file_objs = file_obj.readlines()
for i in file_objs:
print(i)
- 其他可以自己尝试 …
3.2、读取并写入二进制文件
- 读取模式:
t : 读取文本文件(默认),读取文本文件时,size 是以字符为单位
b: 读取二进制文件,读取文件是二进制文件时,size 以字节为单位(3 字节 = 1 字符)
file_name = 'Kalimba.mp3' # 若是绝对路径, 注意路径的写法
with open(file_name,'rb') as file_obj: # rb 读取二进制文件
name = 'Music.mp3' # 定义一个新的文件
with open(name,'wb') as new_obj: # wb 写入二进制文件
c = 1024 * 100 # 定义每次读取的大小
while True:
content = file_obj.read(c)
if not content: # 读完之后的判断
break
new_obj.write(content)
四、关闭文件
4.1、用 open ()
打开的文件,只需要调用函数 close()
即可
file_name = 'demo.txt'
file_obj = open(file_name)
content = file_obj.read()
file_obj.close()
print(content)
# print(file_obj.read()) # 取消注释出现异常, 说明文件已关闭
4.2、用 with... as ...
语句打开的文件,不需要手动关闭
file_name = 'demo.txt'
with open(file_name) as file_obj:
print(file_obj.read())
# print(file_obj.read()) # 取消注释出现异常, 说明文件已关闭
五、文件的其他操作
- 使用 os 模块
import os
os.listdir() # 获取当前目录结构
# r = os.listdir()
r = os.listdir('..') # 默认是 '.' , '..' 表示上一级
print(r, '\n')
os.getcwd() # 获取当前所在目录的路径
r = os.getcwd()
print(r, '\n')
os.mkdir('abc') # 创建目录
print(os.listdir(), '\n')
os.rmdir('abc') # 删除目录
print(os.listdir(), '\n')