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()

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

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

正常运行,今天就学到这
相关推荐
万粉变现经纪人1 小时前
如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
python·selenium·测试工具·scrapy·beautifulsoup·fastapi·pip
sz-lcw3 小时前
MySQL知识笔记
笔记·mysql·adb
古译汉书3 小时前
嵌入式铁头山羊STM32-各章节详细笔记-查阅传送门
数据结构·笔记·stm32·单片机·嵌入式硬件·个人开发
编程武士3 小时前
从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
人工智能·python·yolo·性能优化
我的xiaodoujiao3 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
2301_800050996 小时前
DNS 服务器
linux·运维·笔记
汇能感知6 小时前
光谱相机的未来趋势
经验分享·笔记·科技
傻啦嘿哟6 小时前
Python SQLite模块:轻量级数据库的实战指南
数据库·python·sqlite
Q_Q5110082856 小时前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
XueminXu6 小时前
Python读取MongoDB的JSON字典和列表对象转为字符串
python·mongodb·json·pymongo·mongoclient·isinstance·json.dumps