- 学习测试开发的Day95,真棒!
- 学习时间为1H55M
- 第九次全天课(上午视频1H40M-2H27M,下午视频一0-36M)
读取第三行,把它封装成一个函数
思路:
def read_specific_line(file_path,line_number):
xxxx
xxxx
xxx
return content
print(read_specific_line("e:\\a.txt",3))
代码:
import os.path
def read_specific_line(file_path,line_number):
if not os.path.exists(file_path):
return None
if not isinstance(line_number,int):
return None
fp=open(file_path,"r",encoding="utf-8")
n=1
content=None
for line in fp:
if n==3:
content=line
n+=1
fp.close()
return content
print(read_specific_line("e:\\a.txt",3))
输出:
PS D:\0grory\day9> python .\read.py
3-2020-4-5 22:28:26
编码格式升级版代码
import os.path
def read_specific_line(file_path,line_number,encoding="utf-8"):
if not os.path.exists(file_path):
return None
if not isinstance(line_number,int):
return None
fp=open(file_path,"r",encoding="utf-8")
n=1
content=None
try:
for line in fp:
if n==3:
content=line
n+=1
fp.close()
return content
except:
try:
if encoding=="utf-8":
fp=open(file_path,"r",encoding="gbk")
else:
fp=open(file_path,"r",encoding="utf-8")
n=1
for line in fp:
if n==line_number:
content=line
n+=1
fp.close()
return content
except:
return content
print(read_specific_line("e:\\a.txt",3,"utf-8"))
输出:
PS D:\0grory\day9> python .\read.py
3-2020-4-5 22:28:26
PS D:\0grory\day9>
如果文件的编码为ansi格式
如果不想兼容,更改except部分代码:
import os.path
def read_specific_line(file_path,line_number,encoding="utf-8"):
if not os.path.exists(file_path):
return None
if not isinstance(line_number,int):
return None
fp=open(file_path,"r",encoding="utf-8")
n=1
content=None
try:
for line in fp:
if n==3:
content=line
n+=1
fp.close()
return content
except:
print("编码设定错误,请更换编码参数重试!")
return content
print(read_specific_line("e:\\a.txt",3,"utf-8"))
输出:
PS D:\0grory\day9> python .\read.py
编码设定错误,请更换编码参数重试!
None
PS D:\0grory\day9>
文件操作
文件操作
File_object= open(file, mode='r', buffering=-1, encoding=None,
errors=None, newline=None, closefd=True, opener=None)
➢ errors:可选,并且不能用于二进制模式,指定了编码错误的处理方式,
可以通过codecs.Codec获得编码错误字符串
➢mode:制定了文件打开的方式,函数提供了如下方式,其中,'rt'为默认方式。
➢newline:换行控制,参数有:None,'\n','\r','\r\n'。
输入时,如果参数为None,那么行结束的标志可以是:'\n','\r','\r\n'任意一个,并且三个控制符都首先会被转化为:'\n',然后才会被调用;
如果参数为'',所有的通用的换行结束标志都可以用,但是行结束标识符返回调用不会被编码。输出时,如果参数为None,那么行结束的标志可以是:
'\n'被转换为系统默认的分隔符;如果是'','\n'则不会被编码。
➢closefd:false:文件关闭时,底层文件描述符仍然为打开状态,这是不被允许的,所以,需要设置为ture
➢opener:可以通过调用opener方式,使用自定义的开启器。底层文件描述符是通过调用opener或者file, flags获得的。
➢opener必须返回一个打开的文件描述。将os.open作为opener的结果,在功能上,类似于通过None。
>>> os.pathsep
';'
>>> os.sep
'\\'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'
>>>
newline为默认值的时候
写入"a\nb"
windows磁盘,"a\r\nb"
读取的时候,如果是“a\r\nb"
自动给转换为“a\nb”
建议学会的3个技能
1.讲话的技能
郭德纲:济公传
周立波
喜马拉雅
2.写作:
追风筝的人
3200万rmb=500多万美金
TTT 培训
很大的阅读量:1天20万字(包括街边小广告)
1份作品可以卖个100年
3.一夜暴富,需要很长的积累
读书笔记、脑图
看完以后给别人讲
重要的是实践
《自由财富之路》
少壮不努力,老大徒伤悲
打开文件
代码:
>>> fp=open(r"e:\\a.txt","w")
>>> fp.write(1)
Traceback (most recent call last):
File "", line 1, in
TypeError: write() argument must be str, not int
>>> fp.write(str(1))
1
>>> fp.flush()
>>>
fp.flush()后,文件才会写入
模式的种类:
- r: read
- w:写 write
- a: append 追加
- r+ 同时支持读写,原有内容不丢
- w+ 同时支持读写,清空原有内容
- a+ 同时支持读和追加
- rb: 读二进制
- wb:写二进制
- ab:追加二进制
- rb+
- wb+
- ab+
a代码
>>> fp=open(r"e:\a.txt","a")
>>> fp.write("\nabc\n")
5
>>> fp.flush()
>>> fp.close()
>>>
文件内容
尝试写模式读操作,尝试读模式写操作
>>> fp=open(r"e:\\a.txt","r")
>>> fp.write("abc")
Traceback (most recent call last):
File "", line 1, in
io.UnsupportedOperation: not writable
>>> fp=open(r"e:\\a.txt","w")
>>> fp.read()
Traceback (most recent call last):
File "", line 1, in
io.UnsupportedOperation: not readable
>>>
w+ 代码
>>> fp=open(r"e:\a.txt","w+")
>>> fp.write("abc\ndef\nefg\n")
12
>>> fp.seek(0,0)
0
>>> fp.read()
'abc\ndef\nefg\n'
>>> fp.close()
>>>
文件-原有文件内容被清空后,写入新内容