day2today3夏暮客的Python之路
day2p3 The Hard Way to learn Python
文章目录
- day2p3 The Hard Way to learn Python
- 前言
- 一、读文件
- 1.1 open()函数
- 1.2 file对象属性及方法
- 二、读写文件
- 2.1 读文件
- 2.2 写文件
前言
author:SummerEnd
date:2025.9.3—9.4
今天真是学了不少,接下来我要学关于文件的部分操作,作者在这里主要列出了文件的读取和其他操作,是时候学习对文件的操作了。如果要以编写脚本为目的的话,对文件的操作是非常重要的,以后会需要批量的读取或改写文件。
话不多说我们开始吧
一、读文件
在读文件之前,我们需要先拥有一个可被读取的文件,来随便编写一个文本文件吧,我们先从txt文本文件入手
这是第一行
这是第二行
这个文件一共有39个字
这是第五行
你看到这里了吗
这是最后一行
然后我们编写一个读取文件的程序
from sys import argv
script, filename = argv
#获取文件名,将文件名赋予filename变量
txt = open(filename)
#将文件中的内容读取到txt变量中
print "Here is your file %r" % filename
print txt.read()
#将txt变量中的内容读取出来print "Type the file name again:"
filename_again = raw_input('>')
#再次获取文件名并赋予filename_again变量
txt_again = open(filename_again)
print txt_again.read()
这段代码已经解读的差不多了,但总感觉有哪里不兑,作者让我们自己研究研究,我打算先看一眼下一张的内容再决定我需要补充什么
我回来了,我服了这个垃圾网站了,给我跳401报错,我决定先解决无法正常访问网站的问题,正好我是学网络安全的,让我跳转到另一个文档——
我回来了,开玩笑的,现在已经将近十点了,我不打算今天解决这个问题了,当过程序员的都知道这个点修bug会是什么下场,给大家一个可用的方法——删除浏览数据,至于其原理,我也许会在后续的网络安全学习笔记中提到
让我们继续
在作者的文档中,后续并没有详细的写函数的具体使用方法
我们来自己研究
1.1 open()函数
#基础使用方法
open(file)
#完整语法格式
open(file,mode='r',buffering=-1,encoding=None,errors=None,newLine=None,closefd=Ture,opener=None)
#open()函数的返回结果是一个file对象
参数说明
参数 | 必要性 | 说明 |
---|---|---|
file | 必选 | 文件路径 |
mode | 可选 | 打开模式 |
buffering | 可选 | 设置缓冲 |
encoding | 可选 | 编码格式 |
errors | 可选 | 报错级别 |
newline | 可选 | 区分换行符 |
closefd | 可选 | 传入的file参数类型 |
opener | 可选 | 设置自定义开启器,返回值必须是一个打开的文件描述符 |
mode参数
模式 | 描述 |
---|---|
t | 文本模式(默认) |
x | 写模式,新建一个文件,如果已存在则会报错 |
b | 二进制模式 |
+ | 打开一个文件进行更新(可读可写) |
U | 通用换行模式 |
r | 以只读方式打开文件,文件的指针将会放在文件的开头(默认) |
rb | 以二进制格式和只读方式打开文件,文件的指针将会放在文件的开头(默认)一般用于非文本文件 |
r+ | 打开一个文件用于读写,文件的指针将会放在文件的开头 |
rb+ | 以二进制格式打开文件用于读写,文件的指针将会放在文件的开头,一般用于非文本文件 |
w | 打开一个文件并只用于写入,如果文件已存在则打开文件并从头开始覆盖编辑,若不存在则新建文件 |
wb | 以二进制格式打开一个文件并只用于写入,如果文件已存在则打开文件并从头开始覆盖编辑,若不存在则新建文件,一般用于非文本文件 |
w+ | 打开一个文件并用于读写,如果文件已存在则打开文件并从头开始覆盖编辑,若不存在则新建文件 |
wb+ | 以二进制格式打开一个文件并用于读写,如果文件已存在则打开文件并从头开始覆盖编辑,若不存在则新建文件,一般用于非文本文件 |
a | 打开一个文件并用于追加,文件的指针将会放在文件的结尾,如果文件已存在则从文件结尾开始编辑,如果文件不存在则新建文件 |
ab | 以二进制格式打开一个文件并用于追加,文件的指针将会放在文件的结尾,如果文件已存在则从文件结尾开始编辑,如果文件不存在则新建文件 |
a+ | 打开一个文件并用于读写,文件的指针将会放在文件的结尾,如果文件已存在则从文件结尾开始编辑,如果文件不存在则新建文件 |
ab+ | 以二进制格式打开一个文件并用于读写,文件的指针将会放在文件的结尾,如果文件已存在则从文件结尾开始编辑,如果文件不存在则新建文件 |
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
好多内容,仅仅是这样还没办法记住和理解,虽然大体上可以理解其作用,但实际使用起来可能有很多出乎意料的情况
1.2 file对象属性及方法
感觉已经过分臃肿了,目前我觉得我不需要详细的了解file对象的方方面面
属性 | 描述 |
---|---|
file.closed | 文件是否关闭,关闭true/未关闭false |
file.mode | 返回文件的访问模式 |
file.name | 返回文件的名称 |
file.softspace | print输出后是否必须跟空格,是false/否true |
方法 | 作用 |
---|---|
file.close() | 关闭文件,关闭后不可再进行读写操作 |
file.read([size]) | 从文件读取指定的字节数,未给定或为负则读取所有 |
file.readlines([size]) | 从文件读取指定字节数,为给定则读取整行,包括\n |
file.readlines([sizeint]) | 从文件读取所有行并返回列表,sizeint设定一次读取多少字节 |
file.truncate([size]) | 截取文件,字节通过size指定,默认当前文件位置 |
file.write(str) | 将字符串写入文件,返回写入的字符长度 |
file.writelines(sequence) | 向文件写入一个序列字符串列表 |
file.flush() | 刷新文件内部缓冲,直接把缓冲区的数据写入文件 |
file.fileno() | 返回整型文件的描述符 |
file.isatty() | 如果文件连接到终端设备返回True,否则为False |
file.next() | 返回文件下一行 |
file.seek(offset[whence]) | 设置文件当前位置 |
file.tell() | 返回文件当前位置 |
具体用法见Python File(文件) 方法 | 菜鸟教程
二、读写文件
2.1 读文件
我不行了,明天再写读写文件
OK我回来了,现在是9.4日晚上9:30,我刚刚终于搞懂了HTTPS和TLS握手协议,让我们继续漫漫Python之路
接下来的部分主要是编码练习,大概看了一下,主要用到了.truncate()、.write()、.close()方法,让我们看看这是个怎么回事
from sys import argv
script, filename = argv
print "Let's open the file %r" % filename
print "If you don't want to do that, hit Ctrl-c"
print "If you do want to do that, hit Enter" raw_input("?")print "Opening the file..."
traget = open(filename, 'w')print "Truncating the file.Goodbye"
traget.truncate()
就先打到这里,我们来分析一下代码
前两行不必多说,这是在读取命令行的参数
567行为提示,提示我们按Ctrl-c可以退出程序
而“?”的输入请求实际作用是延滞程序
这里的open()函数使用w模式打开,参考上表,w模式为只写覆盖编辑模式
.truncate()函数为截取文件
运行后再次打开我们的文本文件,发现文件中的文本都消失了,我们把.truncate()函数注释掉重新试试
发现是这个文件的读取方式导致的问题,我们换一种读取模式试试
删除‘w’后会使用默认模式来打开文件,再次运行发现我们的文本文件中的内容并没有消失
但是我们不能将‘t’设置为打开方式,让我们看看报错信息
traget = open(filename, 't')
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 't'
看来这些就是可以当作参数的参数,让我们看看其他几个,比如‘x’‘+’
都不行,看来他们只能当作附属参数跟在上面的参数后面,我们实验一下
ok,果然成功了
我已经寂寞到和你们说话了?
奇了怪了,那‘x’是怎么用的呢我请问了,昨天谁给我的资料,让我去拷打一下
居然是菜鸟教程?我服了,给我的东西没法用啊,不管了学下一个吧
遇到401不要慌,清除记录试试,不管了明天再学,我服了,我要开梯子,还是打不开,不管了
2.2 写文件
先从写代码开始吧
from sys import argv
script, filename = argv
print "Let's open the file %r" % filename
print "If you don't want to do that, hit Ctrl-c"
print "If you do want to do that, hit Enter" raw_input("?")print "Opening the file..."
traget = open(filename,'w')print "Truncating the file.Goodbye"
#traget.truncate()print "Please say someting to me,I will write them down"
line1 = raw_input("line1:")
line2 = raw_input("line2:")traget.write(line1)
traget.write('\n')
traget.write(line2)
print "Now you can open your file,let me close this script"
traget.close()
上面的部分我就不看了,让我们看看下面关于写的部分
嗯,从终端读取两句话,然后输入到文件中,运行
正常运行,今天就学到这
= raw_input(“line2:”)
traget.write(line1)
traget.write(‘\n’)
traget.write(line2)
print “Now you can open your file,let me close this script”
traget.close()
上面的部分我就不看了,让我们看看下面关于写的部分嗯,从终端读取两句话,然后输入到文件中,运行正常运行,今天就学到这