“笨办法”学Python 3基础篇系列文章

“笨办法”学Python 3基础篇 第一部分-打印与输入
“笨办法“学Python 3基础篇 第二部分-文件操作
“笨办法“学Python 3基础篇 第三部分-函数
“笨办法”学Python 3基础篇 第四部分-数据容器与程序结构
“笨办法”学Python 3基础篇 第五部分-面向对象的类
“笨办法”学Python 3基础篇 第六部分-项目骨架与自动测试
“笨办法”学Python 3基础篇 第七部分-搭建简易的网站


第二部分 文件操作

  • “笨办法”学Python 3基础篇系列文章
  • 引言
  • 2.1 获取文件名 - import argv 用法
  • 2.2 打开文件 - open 用法
    • 2.2.1 读取文档 - read 用法
    • 2.2.2 读取文档 - readline 用法
    • 2.2.3 任意位置读取 - seek 用法
    • 2.2.4 编辑文档 - write 用法
  • 2.3 copy文件 - open、read、write 综合用法
  • 小结

引言

上一篇学习总结中,我们接触了简单的打印和输入命令。本篇将介绍通过引用import, 实现对文件进行基本读写操作的方法。


2.1 获取文件名 - import argv 用法

在这里,终于接触到了所谓的引用(import)。不同于C++,Python通过import可以借用其他程序包(程序模块)中的部分功能,而避免了复制大段的代码,增加了灵活性、可调用性和共享性。一种更直白的理解可以想象新建的Python脚本是一张白纸,我们通过import从A处借来了白色的颜料,从B处借来了黄色的颜料,然后绘画出了自己的作品。至于A处的红色和B处的黄色颜料是怎么生产出来的和我们这幅画没有关系。
import argv 中argv代表了参数变量,可以保证你在命令行运行Python脚本时获得传递给Python脚本的参数。试想一下,如果需要你用Python 读取 help.txt这个文档,你该怎么让Python脚本知道要打开哪个文档呢?这时就需要用argv 获取读取的文档名。
具体我们来看一下如何使用import argv 获取脚本参数,实现打印
Hello World!

from sys import argvscript, greeting, somewhere = argv print(f"{greeting} {somewhere}")

首先,Python从默认路径里的sys模块中引用了argv,脚本具备了获取命令行参数的能力,参数是以列表的数据格式返回给脚本。 第二行代码则是对获取的列表参数进行解包,将列表的第一个元素(通常为当前运行的脚本程序名)解包给script变量,第二个元素解包给greeting变量,第三个元素解包给somewhere变量。第三行代码则是前文所介绍的格式化打印。

通过PowerShell运行时,需要在Python命令后输入三个参数,即待运行的脚本文件名(csdn_argv.py), 第二个参数(Hello)和第三个参数(World!)。
这种输入方式与input()的用法区别在于:input()给脚本输入参数是在脚本运行后,而argv则是在脚本运行时同时传递参数。

2.2 打开文件 - open 用法

既然我们可以通过import argv 来获得需要查看的文档的文档名,并解包给脚本中自定义的变量,那么接下来要解决的问题就是:如何利用该变量读写文档内容?
要读写文档,首先得打开文档。实现文档打开功能需要Python3内置函数 open

open() 函数用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode=‘r’)
完整的语法格式为:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

open函数默认模式为只读,返回值为文件对象。因此,通过open函数可以得到待读取文件的对象,接下来就只需对该对象读操作即可。

2.2.1 读取文档 - read 用法

为了读取已经打开的文档内容,需要内置函数read

read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
语法为:fileObject.read([size]);
size – 从文件中读取的字节数,默认为 -1,表示读取整个文件。
返回从字符串中读取的字节。

根据read的语法,fileObject就是我们通过open函数返回的文件对象。这样,就可以通过import argv, open, read来实现文件内容的读取了。
我们以读取hola.txt文档为例,文档内容为:
Hello World!
Hello China!
基本步骤如下:

  1. import argv 获取hola.txt的文件名
  2. open 获得hola.txt的文件对象
  3. read 读取文档内容
  4. close 关闭文档,准备下次文档操作
from sys import argvscript, filename = argv
txt = open(filename)print("first read:", txt.read(12))
print("second read:", txt.read(1))
print("third read:", txt.read())
txt.close()

代码第二行获取了文件的名,第三行用只读模式获得了文件对象,第四行代码则是读取了文件的前12个字节,第五行代码读取了文件的第13个字节换行符,第六行代码则是读取了文件的剩下所有字节数。最后一行代码调用了Python3内置函数close,实现文件的关闭。

从这个程序我们可以发现,连续读操作时,起始字节是从上一次读操作结束时的后一个字节开始的。因此,如果执行下面的读操作,则第二次对文件读操作时,将返回空字节。例如:

from sys import argvscript, filename = argv
txt = open(filename)print("first read:", txt.read())
print("second read:", txt.read(12))
txt.close()

PowerShell中的运行效果为:

2.2.2 读取文档 - readline 用法

如果想一次读写一行字符串,包括换行符,那么就需要用到readline这个函数。基本语法为:

fileObject.readline();
返回从字符串中读取的字节,默认为一行,当括号中有指定数字时,转化为从文件中读取多少字节,包括换行符。

因此,如果我们想读取hola.txt中的Hello World!, 代码可以修改为:

from sys import argvscript, filename = argv
txt = open(filename)print(txt.readline())
txt.close()

2.2.3 任意位置读取 - seek 用法

通过上述两个例子,我们可以发现,读文件指针无法定位到任意位置,导致文档只能读取一遍,无法实现循环读取。解决这一问题的方法是使用seek函数,它的作用是移动文件读取指针到指定位置。基本语法为:

fileObject.seek(offset[, whence])
offset – 开始的偏移量,也就是代表需要偏移的字节数,如果是负数表示从倒数第几位开始;
whence – 可选,默认值为0。给offset定义一个参数,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾开始算起。
如果操作成功,返回新的文件位置,如果操作失败,则函数返回-1。

接下来,我们演示一下,如何循环读取hola.txt的内容:
Hello World!
Hello China!
Hello World!
Hello China!
步骤为:

  1. 获取hola.txt的文件名
  2. 打开hola.txt文件
  3. 第一次读取hola.txt文件
  4. 打印
  5. 重新设置文件读取指针到开头
  6. 第二次读取hola.txt文件
  7. 打印
  8. 关闭hola.txt文件

在这一流程中,第一次使用read()读取所有字节后,读指针处于文件尾部。此时使用seek函数重设读指针位置,实现复读功能。具体代码为:

from sys import argvscript, filename = argv
txt = open(filename)first_data = txt.read()
print(f"first read: \n{first_data}")txt.seek(0, 0)
second_data = txt.read()
print(f"second read: \n{second_data}")txt.close()

在PowerShell中验证结果为:

2.2.4 编辑文档 - write 用法

通过上两节read和readline的用法,我们熟悉了如何打开文档、读取文档的数据、关闭文档。本节我们通过write函数来实现 “如何重新编辑文档”
编辑文档的基本流程为:

  1. 获取文件名
  2. 用写模式打开文件对象( 自动清除文档中的内容
  3. 输入要编辑的语句
  4. 写入文档
  5. 关闭文档
  6. 读取文档验证结果
  7. 关闭文档

为此,我们重新编辑hola.txt文档,将文档内容修改为:
Hello everyone!
代码为:

from sys import argvscript, filename = argv
txt = open(filename, 'w')newline = input(">: ")
txt.write(newline + "\n")
txt.close()txt = open(filename)
print("The new hola.txt is: ", txt.read())
txt.close()

结果为:

2.3 copy文件 - open、read、write 综合用法

复制黏贴是最常用的文件操作方法。接下来,我们介绍如何综合使用前几节介绍的open、read、write函数实现将hola.txt中的内容复制到一个新建文件greet.txt中。
所需要的操作步骤:

  1. 获取hola.txt(源文件)和greet.txt(目标文件)文件名
  2. 打开hola.txt文件
  3. 读取hola.txt文件内容
  4. 写模式打开greet.txt
  5. 写入hola,txt的文档内容
  6. 关闭greet.txt文件
  7. 关闭hola.txt文件

值得注意的是,在第4步时,如果greet.txt不是一个已经存在的文件, 那么在打开时,Python会自动新建一个greet.txt。具体的Python代码如下:

from sys import argvscript, src_file, dir_file = argvsrc = open(src_file)
data = src.read()direct = open(dir_file, 'w')
direct.write(data)direct.close()
src.close()

尽管在这个Python脚本中,我们没有使用print来打印结果。但可以在PowerShell中运行cat greet.txt来检查greet.txt的内容是否正确,如图


小结

文件的操作还有很多用法,本文没有提及。主要原因是在本文所学书籍的练习中,这方面涉及的并不多。如果想进行更复杂的文件操作,可以在open函数中选择不同的读写模式实现。

“笨办法”学Python 3基础篇-文件操作相关推荐

  1. “笨办法”学Python 3基础篇 - 函数

    "笨办法"学Python 3基础篇系列文章 "笨办法"学Python 3基础篇 第一部分-打印与输入 "笨办法"学Python 3基础篇 第 ...

  2. 【读书笔记】Python编程-基础知识和案例讲解,“笨办法”学Python 3_2020.02.15

    [概述] --书名:"笨办法"学Python 3 --作者:泽德 A.肖 --日期:2020年02月15日 --大事件记录: 截至2月14日24时,据31个省(自治区.直辖市)和新 ...

  3. 这本 Python 入门畅销书《“笨办法”学 Python 3》,不仅仅是一本书!

    在我们学习任何一门语言的时候,我们都恨不得有一本书或者有一节视频就能让我们学会所有内容,或者购买的书籍里能包含练习题,带着练习学习的话会更好的理解内容,Python编程语言的话题热度目前来看一直居高不 ...

  4. 从零开始学 Python 之基础篇

    从零开始学 Python 之基础篇 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  5. 《“笨办法”学Python(第3版)》——习题3 数字和数学计算

    本节书摘来自异步社区<"笨办法"学Python(第3版)>一书中的习题3,作者[美]Zed A. Shaw,王巍巍 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. python 动态执行条件判断_【人生苦短,我学 Python】基础篇——条件判断与循环语句(Day12)_不积跬步,无以至千里!-CSDN博客...

    原文作者:AI 菌 原文标题:[人生苦短,我学 Python]基础篇--条件判断与循环语句(Day12) 发布时间:2021-02-08 23:17:06 写在前面:大家好!我是[AI 菌],一枚爱弹 ...

  7. 【人生苦短,我学 Python】基础篇——标准数据类型(Day3)

    大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱编程.热爱分享! 这博客是我对学习的一点总结与思考.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关注我的动态 ...

  8. 【“笨办法”学Python】20.函数和文件

    20.函数和文件 文章目录 前言 一.Atom文本编辑器 二.运行Python程序 总结 前言   函数和文件在一起是如何一起协助发挥作用. 一.Atom文本编辑器 from sys import a ...

  9. 【人生苦短,我学 Python】基础篇——初步认识(Day1)

    写在前面:大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱分享.热爱开源! 这博客是我对学习的一点总结与记录.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关 ...

最新文章

  1. 微信小程序 html css xml,微信小程序 使用towxml解析html流程及踩坑记录
  2. php execl 列的长度,php生成excel列名超过26列大于Z时的解决方法
  3. 视频专辑:轻松学习flash动画制作视频教程
  4. android 可行性分析,可行性研究项目分析程序与步骤
  5. js里的数据类型转换
  6. 2017年什么命_所谓“佛系”,真的不是什么都不做!
  7. Linux视频 pad,Wine 1.9.10 发布下载, 改善视频输出
  8. Java修炼之道--I/O
  9. POS Tagging 标签类型查询表(Penn Treebank Project)
  10. vb 链接 oracle数据库,vb 连接oracle数据库
  11. 中学生科技节活动计算机,2018年学校科技节活动
  12. windows远程linux桌面
  13. DSPE-PEG-TH(AGYLLGHINLHHLAHL(Aib)HHIL) 磷脂(二硬脂酰基磷脂酰乙醇胺)-聚乙二醇-TH(AGYLLGHINLHHLAHL(Aib)HHIL)
  14. [答疑]工程管理组织的业务用例图
  15. the计算机科学全球大学排名,2020THE计算机科学专业排名发布,内地60所大学入榜,清华全球15...
  16. 团队管理那点事,OKR绩效、核心人才、面试、技术分享、研发流程
  17. Grounded Language-Image Pre-training
  18. 平面设计学费,平面设计学费大概多少:夏雨老师
  19. node项目部署https服务
  20. gm修改爆率需要重启服务器吗,传奇私服GM如何调试爆率、刷怪等

热门文章

  1. [RISC-V MCU 应用开发]基于CH32V307和TtencentOS Tiny的物联网心率监测
  2. 资深项目经理这样做成本控制
  3. 量化交易框架开发实践(二)
  4. 超前进位加法器实验报告_超前进位加法器设计实验分析
  5. 如果记录数据库表修改记录
  6. 效率源技术视界I最新:视频文件数据修复方法
  7. 基于SSM和mysql实现的Web便利店收银管理系统实现,Javaweb实现的超市收银平台
  8. 项目上线那些事之Can't connect to X11 window server异常
  9. 学习机器学习四 回归模型——线性回归、L1正则化(Lasso回归)、L2正则化(ridge回归)
  10. kubernetes 强制删除资源