对文件内部的内容进行操作
2018-09-26 21:21 他曾是少年 阅读(276) 评论(0) 收藏 举报一.初识文件操作
使用python来读写文件是非常简单的操作.我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种各样的操作了.根据打开方式的不同能够执行的操作也会有所不同.
打开文件的模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
r 为只读操作
w 为只写
a 为追加写
r+ 读写
a+ 追加读
w+ 写读
rb 读非文本文件 例如 MP3 图片 视频等信息的时候就需要用到rb
..
..
二.只读操作(r,rb)
f=open("E:/pythonS16/day01/文件.txt",mode="r",encoding="GBK")
c=f.read()
print(c)
f.close
注:"E:/pythonS16/day01/文件.txt" 是文件路径
mode="r" 是操作模式 r 为只读
encoding="GBK" 编码方式 为只读"GBK"
f.close 是关闭文件
需要注意encoding表⽰示编码集.根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8
rb. 读取出来的数据是bytes类型,在rb模式下不能选择encoding字符集.
使用python来读写文件是非常简单的操作.我们使用open()函数来打开一个文件,获取到文件句柄.然后通过文件句柄就可以进行各种各样的操作了.根据打开方式的不同能够执行的操作也会有所不同.
打开文件的模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
r 为只读操作
w 为只写
a 为追加写
r+ 读写
a+ 追加读
w+ 写读
rb 读非文本文件 例如 MP3 图片 视频等信息的时候就需要用到rb
..
..
二.只读操作(r,rb)
f=open("E:/pythonS16/day01/文件.txt",mode="r",encoding="GBK")
c=f.read()
print(c)
f.close
注:"E:/pythonS16/day01/文件.txt" 是文件路径
mode="r" 是操作模式 r 为只读
encoding="GBK" 编码方式 为只读"GBK"
f.close 是关闭文件
需要注意encoding表⽰示编码集.根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8
rb. 读取出来的数据是bytes类型,在rb模式下不能选择encoding字符集.
rb的作用在读取非文本文件的时候.比如读取MP3.图像.视频等信息的时候就需要用到rb.因为这种数据是没办法直接显示出来的.在后面我们文件上传下载的时候还会用到.
三.绝对路径和相对路径
1. 绝对路径:从磁盘根目录开始一直到文件名.
2.相对路路径:同一个文件夹下的文件.相对于当前这个程序所在的文件夹而言.如果在同一个文件夹中则相对路路径就是这个文件名.如果在上一层文件夹则要../
三.绝对路径和相对路径
1. 绝对路径:从磁盘根目录开始一直到文件名.
2.相对路路径:同一个文件夹下的文件.相对于当前这个程序所在的文件夹而言.如果在同一个文件夹中则相对路路径就是这个文件名.如果在上一层文件夹则要../
四 读取文件的方法
1.read()将文件中的内容全部读取出来.弊端:占内存如果文件过大.容易导
致内存崩溃
例:
f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
content = f.read()
print(content)
2.read(n)读取n个字符.需要注意的是.如果再次读取.那么会在当前位置继
续去读不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
例:
f = open("../def/哇擦.txt", mode="r" encoding="utf-8")
content = f.read(3)
print(content)
3.readline()一次读取一行数据,注意:readline()结尾,注意每次读取出来
的数据都会有一个\n所以呢.需要我们使用strip()方法来去掉\n或者空格
4.readlines()将每一行形成一个元素,放到一个列表中将所有的内容都读
取出来. 所以也是容易出现内存崩溃的问题不推荐使用
5.循环读取.这种方式是组好的.每次读取一行内容.不会产生内存溢出的问
题
例:f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
for line in f:
print(line.strip())
五 警告!!!
1.写的时候注意.如果没有文件.则会创建文件,如果文件存在.则将原件中
原来的内容删除, 再写入新内容
2.在追加模式下. 我们写入的内容会追加在文件的结尾.
3.对于读写模式.必须是先读.因为默认光标是在开头的.准备读取的.当读
完了之后再进行写入.我们以后使用频率最高的模式是r+
六 其他相关操作
1.seek(n)光标移动到n位置,注意,移动的单位是byte.所以如果是UTF-8的
中文部分要是3的倍数
2. tell() 使用tell()可以帮我们获取到当前光标在什么位置
3.truncate()截断文件。如果想做截断操作.记住了.要先挪动光标.挪动到
你想要截的位置.然后再进行截断关于truncate(n),如果给出了n.则从开头
开头进行截断, 如果不给n, 则从当前位置截断. 后面的内容将会被删除
1.read()将文件中的内容全部读取出来.弊端:占内存如果文件过大.容易导
致内存崩溃
例:
f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
content = f.read()
print(content)
2.read(n)读取n个字符.需要注意的是.如果再次读取.那么会在当前位置继
续去读不是从头读, 如果使用的是rb模式. 则读取出来的是n个字节
例:
f = open("../def/哇擦.txt", mode="r" encoding="utf-8")
content = f.read(3)
print(content)
3.readline()一次读取一行数据,注意:readline()结尾,注意每次读取出来
的数据都会有一个\n所以呢.需要我们使用strip()方法来去掉\n或者空格
4.readlines()将每一行形成一个元素,放到一个列表中将所有的内容都读
取出来. 所以也是容易出现内存崩溃的问题不推荐使用
5.循环读取.这种方式是组好的.每次读取一行内容.不会产生内存溢出的问
题
例:f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
for line in f:
print(line.strip())
五 警告!!!
1.写的时候注意.如果没有文件.则会创建文件,如果文件存在.则将原件中
原来的内容删除, 再写入新内容
2.在追加模式下. 我们写入的内容会追加在文件的结尾.
3.对于读写模式.必须是先读.因为默认光标是在开头的.准备读取的.当读
完了之后再进行写入.我们以后使用频率最高的模式是r+
六 其他相关操作
1.seek(n)光标移动到n位置,注意,移动的单位是byte.所以如果是UTF-8的
中文部分要是3的倍数
2. tell() 使用tell()可以帮我们获取到当前光标在什么位置
3.truncate()截断文件。如果想做截断操作.记住了.要先挪动光标.挪动到
你想要截的位置.然后再进行截断关于truncate(n),如果给出了n.则从开头
开头进行截断, 如果不给n, 则从当前位置截断. 后面的内容将会被删除
七 修改文件的方式
文件修改:只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文
件删除, 将新文件的名字改成老文件的名字.
例:
import os
with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,\
open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
for line in f1:
new_line = line.replace("大白梨", "冰糖葫芦")
f2.write(new_line)
os.remove("小娃娃") # 删除源文件
os.rename("小娃娃_new", "小娃娃") # 重命名新文件
文件修改:只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文
件删除, 将新文件的名字改成老文件的名字.
例:
import os
with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,\
open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
for line in f1:
new_line = line.replace("大白梨", "冰糖葫芦")
f2.write(new_line)
os.remove("小娃娃") # 删除源文件
os.rename("小娃娃_new", "小娃娃") # 重命名新文件
浙公网安备 33010602011771号