day2today3夏暮客的Python之路

day2p3 The Hard Way to learn Python

文章目录

  • [day2p3 The Hard Way to learn Python](#day2p3 The Hard Way to learn Python)
  • 前言
  • 一、读文件
    • [1.1 open()函数](#1.1 open()函数)
    • [1.2 file对象属性及方法](#1.2 file对象属性及方法)
  • 二、读写文件
    • [2.1 读文件](#2.1 读文件)
    • [2.2 写文件](#2.2 写文件)

前言

author:SummerEnd

date:2025.9.3---9.4

今天真是学了不少,接下来我要学关于文件的部分操作,作者在这里主要列出了文件的读取和其他操作,是时候学习对文件的操作了。如果要以编写脚本为目的的话,对文件的操作是非常重要的,以后会需要批量的读取或改写文件。

话不多说我们开始吧

一、读文件

在读文件之前,我们需要先拥有一个可被读取的文件,来随便编写一个文本文件吧,我们先从txt文本文件入手

复制代码
这是第一行
这是第二行
这个文件一共有39个字
这是第五行
你看到这里了吗
这是最后一行

然后我们编写一个读取文件的程序

python 复制代码
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()函数

python 复制代码
#基础使用方法
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()方法,让我们看看这是个怎么回事

python 复制代码
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'设置为打开方式,让我们看看报错信息

python 复制代码
    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 写文件

先从写代码开始吧

python 复制代码
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()

复制代码
上面的部分我就不看了,让我们看看下面关于写的部分

嗯,从终端读取两句话,然后输入到文件中,运行

正常运行,今天就学到这
相关推荐
悠哉悠哉愿意3 小时前
【数学建模学习笔记】时间序列分析:LSTM
笔记·学习·数学建模
小妖同学学AI3 小时前
cursor+python轻松实现电脑监控
开发语言·python
996终结者3 小时前
软件使用教程(四):Jupyter Notebook 终极使用指南
ide·python·jupyter
THMAIL4 小时前
机器学习从入门到精通 - Python环境搭建与Jupyter魔法:机器学习起航必备
linux·人工智能·python·算法·机器学习·docker·逻辑回归
黄小莫4 小时前
【问题分析】paramiko 执行命令报 No such file or directory
linux·python
计算机毕设残哥4 小时前
数据量太大处理不了?Hadoop+Spark轻松解决海洋气象大数据分析难题
大数据·hadoop·python·数据分析·spark·django·dash
是有头发的程序猿4 小时前
电商开发日志:淘宝图片搜索商品列表(二)
数据库·爬虫·python
JavaEdge在掘金4 小时前
Spring Boot如何启动嵌入式Tomcat?
python
AGI杂货铺4 小时前
微软GraphRAG 端到端使用及自用工具类
python·microsoft·flask