文件操作
对文件的操作流程:
- 以指定模式打开一个文件,得到文件句柄并赋值给一个变量
- 通过文件句柄的操作以实现对文件的读写操作
- 关闭文件
1、以指定模式打开一个文件,得到文件句柄并赋值给一个变量
file = open(“filename”,mode=“r”,encoding=“utf-8”)
##获得文件的 句柄,并以utf-8编码以读模式打开
2、通过文件句柄的操作以实现对文件的操作
只要对文件进行过读或写操作,那么文件的光标就会发生移动。
读文件:以读模式r打开文件
读取文件整体内容至内存单元
:file.read()
注意:文件句柄存在文件光标,起初光标在第一行,但read()过一次后,光标便在最后行最后一个内容之后。所以对file再次read(),将没有内容
按指定数量读取文件的内容至内存单元
:file.read(n)
读取n个字符.需要注意的是.如果再次读取.那么会在当前位置继续去读⽽而不 是从头读, 如果使⽤用的是rb模式. 则读取出来的是n个字节
按行读文件至内存单元
:file.readline()
函数()中加了数值则读取指定数的字符;读了一行或者几个字符后光标也会相应的移动。
读取文件生成列表,并将每行作为列表的一个元素
:file.readlines()
注意:此方式需要先将文件全部送入内容,大文件不合适。建议使用for循环
for line in f:
print(line)
写文件内容:以写模式w打开文件
注意:对已存在的文件以写模式打开,则先打开文件,并清空文件内容然后开始写内容
file.write(str) 将指定字符串写入文件,返回的是写入的字符长度
追加文件内容:追加模式(a)打开文件,打开文件后光标将移动到内容最后一个
rb
读二进制形式读取文件 ,多用于非简单文字的文件
wb
将二进制形式的内容写入文件
r+
:打开一个文件用于读写。文件指针将会放在文件的开头。
- 如果先读后写,则先读文件内容,光标按读的字符数发生移动;再进行写操作时将内容追加到文件最后一个内容后
- 如果先写后读,则先开始写内容,写的内容根据内容会覆盖文件原有内容,光标根据写的字符数发送移动;将从光标后开始读取内容
注意:并非完全覆盖,根据写的内容长度进行覆盖,如果写的内容长度比原有内容短,则原有内容后面部分会保留
w+
写读模式:文件若已经存在就先清除内容再写,写后光标发生移动;接着读的话此时光标后面没内容
a+
追加读文件:先追加内容后,此时光标在最后一个位置,接着读的话光标后面没内容
打开文件的方式如果没有带b,则open默认在打开时会完成转换成指定编码。
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open(‘log’,‘r’) as f:
文件的函数操作
file.tell()
获取读文件时,光标停留在第几个字符
file.seek()
光标回到某个指定位置,。seek函数的参数有两个,第一个表示偏移量,以字节为单位;第二个表示偏移的起点,默认是0,表示开头,1表示当前位置,2表示末尾。
file.seekable()
判断文件是否可以移动光标
file.readable()
判断文件是否可读
file.flush()
将内存缓冲中的数据一次性写入到硬盘中
file.truncate()
从文件开头按指定的字符数进行截断
文件操作举例
修改文件内容:
为针对大文件速度缓慢,可以对原文件逐行读取,再逐行写入到新文件,符合条件的内容先进行修改,然后才写入到新文件中。
f1=open("pks","r")
f2 = open("pks_new", "w")
line = f1.readline()
while line:
f2.write(line)
line =f1.readline()
f1.close()
f2.close()
大文件读取:
f = open("123.dat",'r')
cont = f.read(10)
while len(cont) >0 :
print(cont)
cont = f.read(10)
f.close()
大文件复制:
f1 = "123.dat"
f2 = "123.dat.bak"
fs1 = open(f1,'r')
fs2 = open(f2,'w')
cont1 = fs1.readline()
while len(cont1)>0:
#写入
fs2.write(cont1)
cont1 = fs1.readline()
fs1.close()
fs2.close()
python的运算符
算数运算
以下假设变量:a=10,b=20
比较运算
以下假设变量:a=10,b=20
赋值运算
以下假设变量:a=10,b=20
逻辑运算
针对逻辑运算的进一步研究:
在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。
成员运算:
除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。
判断子元素是否在原字符串(字典,列表,集合)中:
例如:
#print(‘喜欢’ in ‘dkfljadklf喜欢hfjdkas’)
#print(‘a’ in ‘bcvd’)
#print(‘y’ not in ‘ofkjdslaf’)
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符: