Day 07 文件的相关操作
文件初始:
文件的三要素:
path:文件的路径
mode:r w r+ w+ a
encoding: 编码方式
# 打开一个文件的方法
f1 = open('e:\echo.txt', encoding='utf-8',mode='r') # mode = 'r'可以省略
r1 = f1.read()
print(r1)
f1.close()
# 方法二,可以不接 f1.close()
with open('e:\echo.txt',encoding='utf-8', mode='r') as f1:
r1 = f1.read()
print(r1)
打开文件可能会出现的集中报错
报错原因:
1,路径错误。 \与后面的那个字符具有了特殊意义。(e:\new.txt \n表示换行符)
解决方式:
r'd:\美女护士空姐联系方式.txt' 在路径最前面+ r
'd:\\美女护士空姐联系方式.txt' 第一个\对第二个进行转义。
2,Unicodedecodeerror: 编码问题。
encoding='utf-8' 打开文件的编码与文件存储时的编码不一致。 3, encoding 只是声明了此文件的需要用什么编码本编码解码而已。 4,路径:
绝对路径:从磁盘(根目录)开始,直到找到你的文件。
相对路径:当前路径(当前文件夹)找到的文件。
f1 = open('e:\echo.txt', encoding='utf-8',mode='r')
f1 f file file_handler ,f_h.... 文件句柄
open() 内置函数 这个函数实际上是调用的操作系统的对文件操作的功能,
windows:默认的编码方式gbk.
linux: 默认的编码方式utf-8.
IOS:默认的编码方式utf-8.
接下来你对文件进行的任何操作,都需借助文件句柄操作。
1, 打开文件产生文件句柄(path, encoding mode)。
2,对文件句柄进行操作。
3,关闭文件句柄。
f1.close() 关闭文件,清除内存 r下的五种读取方式:
1、read()全部读取出来
2、read(n)读n个字符
在 r 模式下按照字符读取
在 rb 模式下按照字节读取
3、readline读取一行
4、readlines读取多行
5、for遍历
with open('file', encoding='utf-8') as f1:
# r1 = f1.read()
# # print(r1)
# r1 = f1.read(3) # 三个字符
# print(r1)
# r1 = f1.readline()
# print(r1) # 打印第一行
# print(f1.readline()) #打印第二行
# print(f1.readline()) #打印第三行
# r1 = f1.readlines()
# print(r1) # ['你好,世界!\n', 'hello wrod!\n', '欢迎来到python的世界']
# for i in f1:
# print(i) # for 遍历
rb模式
b模式操作的文件是非文字类的文件:图片,视频,音频等等
read() read(n) readline() readlines() for 循环
f = open('file1',mode='rb')
print(f.read())
f.close()
f = open('file1',mode='rb')
print(f.read(3)) # 按照字节
f.close()
with open('file', mode='rb') as f1: # 不加encoding='utf-8',加了会报错
r1 = f1.read() # b'\xe4\xbd\xa0\xe5\xa5\xbd\r\n'
r1 = f1.read(3)
r1 = f1.readline()
r1 = f1.readlines()
print(r1)
for i in f1:
print(i)
r+ 模式 ==(r+w,可读,可写)
with open('file', encoding='utf-8', mode='r+') as f1:
f1.write('你猜') #这行放前面,会替换掉file里面,开始的两个字符
r1 = f1.read()
print(r1) # 先读后写,不会把刚写入的内容读取出来,除非改变光标的位置
实现读取写入后的内容
with open('file', encoding='utf-8', mode='r+') as f1:
f1.seek(0, 2) #将光标调制file结尾,在结尾添加,不会覆盖文件
f1.write('你猜hello')
f1.seek(0) #将光标调制file开始位置
print(f1.read())
注意:在 r+ 模式下,应该先读,后写入。
w 模式
没有文件创建文件写入,有文件清空原文件内容写入新内容。
w模式 必须是以字符串的内容写入
#先清空源文件,在将hello输入到源文件
with open('file',encoding='utf-8',mode='w') as f1:
f1.write('hello')
用wb模式,完成对图片的复制
with open('timg.jpg', mode='rb') as f1:
new_jpg = f1.read()
with open('timg3.jpg', mode='wb') as f2:
f2.write(new_jpg)
W+ : 写读模式
with open('file', encoding='utf-8',mode='w+') as f1:
f1.write('') # 先清空,后写入
f1.seek(0) # 将光标至开始位置
print(f1.read())
文件的追加 a
没有文件创建文件追加内容,有文件在原文件的末尾追加新内容
with open('file', encoding='utf-8', mode='a') as f1:
f1.write('你好')
文件其他操作
文件所有操作
class TextIOWrapper(_TextIOBase):
"""
Character and line based layer over a BufferedIOBase object, buffer. encoding gives the name of the encoding that the stream will be
decoded or encoded with. It defaults to locale.getpreferredencoding(False). errors determines the strictness of encoding and decoding (see
help(codecs.Codec) or the documentation for codecs.register) and
defaults to "strict". newline controls how line endings are handled. It can be None, '',
'\n', '\r', and '\r\n'. It works as follows: * On input, if newline is None, universal newlines mode is
enabled. Lines in the input can end in '\n', '\r', or '\r\n', and
these are translated into '\n' before being returned to the
caller. If it is '', universal newline mode is enabled, but line
endings are returned to the caller untranslated. If it has any of
the other legal values, input lines are only terminated by the given
string, and the line ending is returned to the caller untranslated. * On output, if newline is None, any '\n' characters written are
translated to the system default line separator, os.linesep. If
newline is '' or '\n', no translation takes place. If newline is any
of the other legal values, any '\n' characters written are translated
to the given string. If line_buffering is True, a call to flush is implied when a call to
write contains a newline character.
"""
def close(self, *args, **kwargs): # real signature unknown
关闭文件
pass def fileno(self, *args, **kwargs): # real signature unknown
文件描述符
pass def flush(self, *args, **kwargs): # real signature unknown
刷新文件内部缓冲区
pass def isatty(self, *args, **kwargs): # real signature unknown
判断文件是否是同意tty设备
pass def read(self, *args, **kwargs): # real signature unknown
读取指定字节数据
pass def readable(self, *args, **kwargs): # real signature unknown
是否可读
pass def readline(self, *args, **kwargs): # real signature unknown
仅读取一行数据
pass def seek(self, *args, **kwargs): # real signature unknown
指定文件中指针位置
pass def seekable(self, *args, **kwargs): # real signature unknown
指针是否可操作
pass def tell(self, *args, **kwargs): # real signature unknown
获取指针位置
pass def truncate(self, *args, **kwargs): # real signature unknown
截断数据,仅保留指定之前数据
pass def writable(self, *args, **kwargs): # real signature unknown
是否可写
pass def write(self, *args, **kwargs): # real signature unknown
写内容
pass def __getstate__(self, *args, **kwargs): # real signature unknown
pass def __init__(self, *args, **kwargs): # real signature unknown
pass @staticmethod # known case of __new__
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass def __next__(self, *args, **kwargs): # real signature unknown
""" Implement next(self). """
pass def __repr__(self, *args, **kwargs): # real signature unknown
""" Return repr(self). """
pass buffer = property(lambda self: object(), lambda self, v: None, lambda self: None) # default closed = property(lambda self: object(), lambda self, v: None, lambda self: None) # default encoding = property(lambda self: object(), lambda self, v: None, lambda self: None) # default errors = property(lambda self: object(), lambda self, v: None, lambda self: None) # default line_buffering = property(lambda self: object(), lambda self, v: None, lambda self: None) # default name = property(lambda self: object(), lambda self, v: None, lambda self: None) # default newlines = property(lambda self: object(), lambda self, v: None, lambda self: None) # default _CHUNK_SIZE = property(lambda self: object(), lambda self, v: None, lambda self: None) # default _finalizing = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
重点操作强调
flush 强制保存
with open('file',encoding='utf-8',mode='r') as f1:
f1.write('你好')
f1.flush() #强制保存,相当于ctrl+s
readable writeable 判断一个文件句柄是否可读,可写
f1 = open('file', encoding='utf-8', mode='w')
print(f1.readable()) # True
f1 = open('file', encoding='utf-8', mode='w')
print(f1.readable()) # False 在写情况下,file不可读
with open('file', encoding='utf-8', mode='r') as f1:
print(f1.writable()) # False 在读模式下不可写
with open('file', mode='w') as f1:
print(f1.writable()) # True
seek tell 按照字节去调整读光标位置
f1 = open('file', encoding='utf-8', mode='r')
f1.seek(0, 2)
print(f1.tell()) # 显示光标的末尾(最后一个字节位置,如果有换行,要算两个字节“\n”)
print(f1.read())
truncate()
只能在可写的模式下 截取原文件。只能从头截取,不能调整光标截取一部分。
不能在w模式下使用truncate
f1 = open('file', encoding='utf-8', mode='r+')
f1.truncate(3) # 以字节为单位截取,弱是中文则必须以三个字节为一个单位截取
文件的改:
五个步骤
1、以读的模式打开原文件,产生文件句柄f1
2、以写模式打开新文件,产生文件句柄f2
3、读取源文件,将原文件的内容改写成新内容写入新文件
4、删除源文件
5、将新文件重命名成源文件
# 修改文件的五个步骤
import os
with open('log', encoding='utf-8', mode='r') as f1: # 打开原文件log
with open('log.bak', encoding='utf-8', mode='w') as f2: # 打开新文件log.bak
new_file = f1.read() # read会读取所有文件,占内存,建议用for
f2.write(new_file.upper()) # 将修改的内容写入新文件
os.remove('log') # 删除文件
os.rename('log.bak', 'log') # 修改名称
升级版
import os
with open('log', encoding='utf-8', mode='r') as f1, \
open('log.bak', encoding='utf-8', mode='w') as f2:
for i in f1:
new_file = i.replace('ALEX', 'Echo')
f2.write(new_file)
os.remove('log')
os.rename('log.bak', 'log')
Day 07 文件的相关操作的更多相关文章
- 关于C#资源文件的相关操作
关于资源文件的相关操作. //1.比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 //比较典型的做法是通过代码程序集加载指定资源 //如下通过Assembly的静态方法GetExecut ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- Oracle 参数文件及相关操作介绍
Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...
- Java IO_001.File类--文件或文件夹相关操作
Java IO之File对象常用操作 File类:用于文件或文件夹或网址相关联的操作.可以关联或不关联文件(即关联不存在的文件).构造函数有: public File(String pathname) ...
- python文件的相关操作
python 目录 python 1.python文件的介绍 使用文件的目的 Python文件的类型主要有两种:文本文件和二进制文件. 操作文件的流程主要有三步:打开-操作-关闭操作. 2.文件的打开 ...
- 用 JSP 实现对文件的相关操作
前段时间一直忙着作业,实验,动手的时间真是少之又少,今天终于可以继续和大家分享关于 JSP 的学习心得. 简单总结一下吧: JSP 理论性很强,感觉就是纯语法. 我更偏向于实际编写代码,这样更容易理解 ...
- plist文件的相关操作
本文概要 1.plist文件的简介 2.在Xcode中创建plist文件 3.在Xcode中将plist文件转换成数组或者字典对象 4.将数组或者字典对象转换成plist文件并且存储 详细介绍 1.p ...
- linux基础——关于chmod用户权限和文件的相关操作
第一部分:1) 新建用户natasha,uid为1007,gid为555,备注信息为“master” 操作:useradd natasha新建natasha:修改uid是,usermod -u 100 ...
- C# 文件流相关操作
二进制转换成图片: MemoryStream ms = new MemoryStream(bytes); ms.Position = ; Image img = Image.FromStream(ms ...
随机推荐
- js 弹窗的实现
原理: 1. 点击按钮,触发窗口显示,遮罩层显示,并设置窗口的位置 2. 为弹出的窗口绑定鼠标滚动事件和视窗改变事件 3.点击关闭按钮,弹窗消失,遮罩层消失 html 代码: <!DOCTYPE ...
- 通过SSH克隆远程仓库(GitLab)到本地
由于不是任何用户都能从远程仓库克隆到本地的,也是需要鉴别的,因此本地需要用git bash 创建一个公钥,而远程仓库也要把这个公钥保存下来,进而本地才可以从远程download.主要步骤如下: 1.首 ...
- docker之数据卷管理
转自:https://www.cnblogs.com/jsonhc/p/7777811.html docker之数据卷的备份和还原 1.现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷 [r ...
- Python文件和目录模块介绍:glob、shutil、ConfigParser
glob模块 查找符合特定规则的文件路径名,路径名可以使用绝对路径也可以使用相对路径.查找文件会使用到三个通配符,星号*,问号?和中括号[],其中"*"表示匹配0~n个字符, &q ...
- MySQL中tinytext、text、mediumtext和longtext详解【转】
一.数字类型 类型 范围 说明 Char(N) [binary] N=1~255 个字元binary :分辨大小写 固定长度 std_name cahr(32) not null VarChar( ...
- C# 模拟多线程下载文件
原地址:http://www.cnblogs.com/Opiece/p/4803836.html 客户端 public static string strContent = ""; ...
- Ros系列_学习一
刚入门ROS,不,没入门,还在门口,这是今天的总结: (一)创建一个工作空间 1.创建一个初始工作空间: mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src cat ...
- CSS样式表的写作规范
推荐大家使用的CSS书写规范.顺序 写了这么久的CSS,但自己都没有按照良好的CSS书写规范来写CSS代码,东写一段西写一段,命名也是想到什么写什么,过一段时间自己都不知道写的是那一块内容, 这样会影 ...
- HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 底层实现
HashMap相关问题 1.你用过HashMap吗?什么是HashMap?你为什么用到它? 用过,HashMap是基于哈希表的Map接口的非同步实现,它允许null键和null值,且HashMap依托 ...
- 多线程 ThreadLocal
要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的? ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是 ...