注意事项!
打开文件,一定要关闭,系统上可操作文件数量是有限的,避免超出操作系统限制
文件操作流程:
1.创建文件对象
2.调用文件方法进行操作
3.关闭文件
1.文件的打开模式
r 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
w 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
a 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建
r+ 在r的基础上增加了可写功能
w+ 在w的基础上增加了可读功能
a+ 在a的基础上增加了可读功能
b 读写二进制文件(默认是t,表示文本),需要与上面几种模式搭配使用,如ab,wb, ab, ab+(POSIX系统,包括Linux都会忽略该字符)
2.文件基本操作
f = open('示例文件.txt','r',encoding='utf-8')
a = f.read() #读取文件,括号中可加参数
print(a)
b = f.read(5) #读取前5个(文件中,每行后面的/t也算一个),python3中,汉字占一个单位
print(b)
c = f.readline() #取一整行,想全部读完,就要一行一行取,括号里加参数可取这一行的前几个
print(c)
d = f.readlines() #读出文件所有内容
print(d)
f.close()
f = open('示例文件.txt','r',encoding='utf-8')
a = f.readlines()
number = 0
for i in a:
number += 1
if number == 6:
i = ''.join([i.strip(), 'iiiii']) # 字符串拼接,strip是为了去除这行最后的/n
print(i.strip())
print(f.tell()) #光标的位置
f.close()
3.文件操作常见方法
fileno()
文件描述符,查看问文件专属代号
f.seek(size)
移动在文件中,光标的位置
f = open('示例文件.txt','r',encoding='utf-8')
f.fileno() #文件描述符
d = f.read(5)
print(d)
f.seek(3) #移动光标的位置
e = f.read(5)
print(e)
f.close()
f.truncate():截断数据(不能在r模式下)
在w模式下:先清空,再写,再截断
在a模式下:直接将指定位置后的内容截断
f = open('示例文件1.txt','r+',encoding='utf-8')
f.truncate(8)
a = f.read()
print(a)
f.close()
f.flush()方法:用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,可用来做文件读取进度条
import sys,time
for i in range(30): #进度条类型
sys.stdout.write("*")
sys.stdout.flush()
time.sleep(0.1)
4.文件操作中的with方法
with open('示例文件.txt', 'r',encoding='utf8') as f:
a = f.readline()
b = f.read()
print(a)
print(b)
with open('示例文件.txt','r',encoding='utf8') as f_read, open('示例文件1.txt','w',encoding='utf8') as f_write:
for i in f_read:
f_write.write(i)
5.获取文件目录下的子文件名(推荐使用第二种)
方法一:
遍历文件夹及其子文件夹中的文件,并存储在一个列表中 输入:文件夹路径、空文件列表[] 输出: 文件列表Filelist,包含文件名(完整路径)
import os
path = '你的文件夹所在的路径'
def get_filelist(dir, Filelist):
if os.path.isfile(dir):
# Filelist.append(dir)
# # 若只是要返回文件文,使用这个
Filelist.append(os.path.basename(dir))
elif os.path.isdir(dir):
for s in os.listdir(dir):
# 如果需要忽略某些文件夹,使用以下代码
# if s == "xxx":
# continue
newDir = os.path.join(dir, s)
get_filelist(newDir, Filelist)
return Filelist
if __name__ == '__main__':
list = get_filelist(path, [])
print(len(list))
for e in list:
print(e)
方法二:
import os
import glob
path = '1111'
pathlist=glob.glob('../222/'+path+'/*.csv')
# print(pathlist)
for i in pathlist:
path_name,filename = os.path.split(i)
print(filename)