1文件操作... 1
1.1打开和关闭文件... 1
1.1.2 open函数... 1
1.2 文件 File对象的属性... 1
1.2.1 属性... 1
1.2.2 方法... 2
1.2.3 mode=’xx’属性详情... 4
1.3 OS操作文件... 6
1文件操作
1.1打开和关闭文件
1.1.2 open函数
file = open(file_name [,mode][,buffering]
eg:file = open(“test.txt”,mode = ‘r’,encoding = ‘utf-8’)
参数详情:
file_name : 文件名
mode:这个参数非强制选择,默认 只读(r),详情请见:
https://www.runoob.com/python/python-files-io.html
encoding :文件的编码方式
打开文件的方式
注意点:f.close() 最后一定要写,关闭文件,关闭后不可以在读
1.2 文件 File对象的属性
1.2.1 属性
file = open(‘a.txt’, mode = ‘r’ , encoding = ‘utf-8’)
file.close 文件关闭返回 true ,否则返回 false
file.name 返回文件名称
flie.mode 返回被打开文件的访问模式
1.2.2 方法
注意点:写完一定要刷新,并且一定要关闭
① write() 方法:
write() 方法可以将任何字符串写入一个打开的文件。注意点:Python字符中可以是二进制数据,而不仅仅是文字。
write() 方法不会在字符串的结尾自动添加换行符(‘\n’)
def test3(): f = open("day008/day_008_txt1",mode='w',encoding="utf-8") f.write('孟子三迁,孟轲(孟子)的母亲为了选择良好的\n教育环境,多次迁居') #文件中 "\n" 的作用是换行,write()方法不会自动换行 f.flush() #刷新缓冲区 #result = f.read() #这句错误,不能读,因为 mode='w',只读模式 f.close() #关闭文件 test3()
② read() 方法:从一个打开的文件中读取一个字符串
def test1(): # 读操作 f = open('day008/day_008_txt' , mode = 'r',encoding='utf-8') result = f.read() print(result) f.close() # 一定要记得写close,并且写到最后面 test1()
read(n) 读取 n 个字符,如果文件没有关闭,在读取,不会读,而是在上次光标所在处开始读。其实,看见带‘b’的,都是处理的非文本。(包含下面)
注意:在文本模式下,用“r”和“w”模式,不用编码和解码。但是在非文本文件下,比如视频、音乐等、用‘wb’和‘rb’,因为
用‘w’和‘r’是操作不了的。其实,
③ close() 方法:
File对象的 close() 方法刷新缓冲区里任何还没写入的信息,并且关闭文件,关闭后就不能再进行写入。
④ seek() 方法:用于移动文件读取指针到指定位置,也就是光标
语法:file.seek(offset[,whence])
offset :开始的偏移量
whence :可选,默认值为0 。 表示要从哪个位置开始偏移;0代表开头,1代表当前位置,2代表文件末尾
⑤ tell() :获取光标当前位置
file.tell() 方法返回文件当前位置,即文件指针当前位置。
day008/day_008_1.txt文件内容
秦时明月汉时关,
万里长征人未还。
但使龙城飞将在,
不教胡马度阴山。
def test13(): f = open('day008/day_008_1.txt',mode='r',encoding='utf-8') print(f.name)#文件名 line = f.readline()#读取文件中的一行数据 print('读取的数据为:%s'%(line)) #获取当前文件位置 path = f.tell() print('当前位置:%d'%path) f.close()#关闭文件 test13()
结果:
⑥ truncate() :截断文件
file.truncate( [size]) 方法用于截断文件,如果有可选参数size,则表示截断文件为size个字符。如果没有指定size,则从当前位置起截断;截断之后size后面的所有字符被删除。
注意点:deeping-bug:在r+ 模式下,如果读取了内容,不论读取内容的多少,光标显示的多少。再写入文件或操作文件时都是在结尾进行。
1.2.3 mode=’xx’属性详情
t |
| 文本模式 (默认)。 |
x |
| 写模式,新建一个文件,如果该文件已存在则会报错。 |
b |
| 二进制模式。 |
+ |
| 打开一个文件进行更新(可读可写)。 |
U |
| 通用换行模式(不推荐)。 |
r |
| 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb |
| 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ |
| 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ |
| 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w |
| 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb |
| 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ |
| 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ |
| 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a |
| 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab |
| 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ |
| 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ |
| 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
1) a 或 ab :
def test4(): # a或ab 用于文件的追加,把新内容加到已有内容后面 f = open("day008/day_008_txt1", mode='a', encoding="utf-8") f.write("'《三字经》:'昔孟母,择邻处'") f.flush() f.close() def test5(): # w + 写读 (不常用) 直接覆盖 f = open("day008/day_008_txt1", mode='w+', encoding="utf-8") f.write("啊") f.flush() f.close() def test6(): # a+ 追加读 # a+ 先写后读和先读后写都是获取不到内容的,不覆盖 f = open("day008/day_008_txt1", mode='a+', encoding="utf-8") f.write("学习学习") print(f.read()) f.flush() f.close()
1.3 OS操作文件
文件修改:将老文件中内容读取到内存中 à修改à删除老文件à新文件名替换老文件名
弊端:内存容易溢出。解决办法:一行一行的读,一行一行的改
for line in file
1 import os 2 #方法一 3 def test10(): 4 #打开文件,创建新文件 5 with open("day008/day_008_1.txt",mode='r',encoding='utf-8') as f1,\ 6 open("day008/day_008_1_new.txt",mode='w',encoding='utf-8') as f2: 7 8 content = f1.read() 9 new_content = content.replace('飞将','李广') # 替换内容 10 f2.write(new_content) # 写到 f2 中 11 os.remove('day008/day_008_1.txt') #删除原文件 12 os.rename('day008/day_008_1_new.txt','一生未封侯.txt') # 13 14 # 方法二 15 def test11(): 16 f1 = open("day008/day_008_1.txt", mode='r', encoding='utf-8') 17 f2 = open("day008/day_008_1_new.txt", mode='w', encoding='utf-8') 18 for line in f1: #一行一行取 19 new_line = line.replace('李广','飞将') 20 f2.write(new_line) 21 os.remove('day008/day_008_1.txt') 22 os.rename('day008/day_008_1_new','李广特点守') 23 f2.flush()
Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是非常重要。它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows中运行。
下面是os模块中常用的模块:
1 #os模块中比较常用的方法: 2 import os 3 def test12(): 4 print('01 ',os.sep) #可以取代操作系统特定的路径分隔符。windows下为'\' 5 print('02 ',os.name) # 字符串指示你正在使用的平台。如Windows,它是'nt',linux/unix用户,它是'posix' 6 print('03 ',os.getcwd()) #当前工作目录,即当前Python脚本工作目录路径 7 print('04 ',os.putenv('username','username/')) #设置一个环境变量 8 print('05 ',os.environ['username']) #获取环境变量 9 print('06 ',os.listdir('E:\PythonWork\python1\day008')) #返回指定目录下的所有文件和目录名 10 print('07 ',os.curdir) #返回当前目录 ('.') 11 # print(os.remove('E:\PythonWork\python1\day008\008测试')) #删除一个文件 12 # print(os.system(command)) # 用来运行shell命令 13 # print(os.linesep) #给出当前平台使用的行终止符。Windows是'\r\n',linux是'\n',Mac是'\r' 14 # print(os.chdir(path)) #改变工作目录到path 15 test12()
运行截图:
os.path 常用的方法:
1 #os.path中常用方法: 2 import os 3 def test13(): 4 print('01.',os.path.isfile('E:\PythonWork\python1\day008\day_008_文件操作.py')) 5 # 检验给出的路径是不是一个文件 返回值 True False 6 7 print('02.',os.path.isdir('E:\PythonWork\python1\day008')) 8 # 检验给出的路径是不是一个目录 返回值 True False 9 10 print('03.',os.path.exists('E:\PythonWork')) 11 #检验给出的路径是否真的存在 12 13 print('04.',os.path.getsize('E:\PythonWork')) 14 #获取文件大小 15 16 print('05.',os.path.abspath('day_008_文件操作.py')) 17 #获取文件绝对路径 18 19 print('06.',os.path.normcase('E:\PythonWork\python1\day008\day_008_文件操作.py')) 20 #规范路径字符串形式 21 22 print('07.',os.path.split('E:\PythonWork\python1\day008\day_008_文件操作.py')) 23 #把路径分割成目录和文件名,以元组返回 24 25 print('08.',os.path.splitext('E:\PythonWork\python1\day008\day_008_文件操作.py')) 26 #分离文件名和拓展名 27 28 print('09.',os.path.join('E:\PythonWork\python1\day008','day_008_文件操作.py')) 29 #使用'\\'连接目录与文件名,或连接目录与目录 30 31 print('10.',os.path.basename('E:\PythonWork\python1\day008\day_008_文件操作.py')) 32 #返回文件名 33 34 print('11.',os.path.dirname('E:\PythonWork\python1\day008\day_008_文件操作.py')) 35 # 返回文件路径 36 test13()
运行截图: