Python知识点12---Python的I/O操作

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。

Python的流(I/O)操作,最简单的其实就是输入和输出,输出我们都知道使用输出函数

print( str , end = '\n')

但是Python的输入却有两个方法,一个是我们最常用的 input,但是其实Python还有一个raw_input函数也可以输入,那么它们的区别在哪里呢?

raw_input([prompt]) 	从标准输入读取一个行,就是键盘输入的数据,并返回一个字符串(去掉结尾的换行符),prompt 是提示语句

例如:
	str = raw_input("请输入:")
	print "你输入的内容是: ", str
结果:
	请输入:Hello Python!
	你输入的内容是:  Hello Python!

但是input,这个函数除了支持raw_input同样的功能之外,它还有一个特别的特点,它可以识别输入数据中的Python代码

str = input("请输入:")
print "你输入的内容是: ", str

例如:
	输入:[x*5 for x in range(2,10,2)]
结果:
	你输入的内容是:  [10, 20, 30, 40]

再向深层次学习流操作,那就要说说Python和其他语言一样都有的操作文件API,且Python的文件API更加简洁
open(name,mode,buffering)		name是文件路径,mode是访问模式,该方法会返回一个文件对象,buffering是一个寄存区,也就是字符缓冲区的标识,如果 buffering 的值被设为 0,文件就不会被缓存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认

mode模式支持如下的参数,常用的也就读写而已
在这里插入图片描述
在这里插入图片描述
在菜鸟教程里面罗列了常用的几个模式,并且使用图例的方式进行直白的解释
在这里插入图片描述
以及提供了下面这个表格,解释了常用的几个模式,可以实现哪些功能
在这里插入图片描述
同时你可以知道根据open方法返回的对象,获得如下信息
在这里插入图片描述

fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace

在打开一个文件,并使用结束后,一定要记住关闭它,不然你的内存会被大量占用

文件对象.close()

在调用了关闭流的方法后,Python会刷新缓存区里面的内容到文件中,之后就不能再操作写入了


Pythond的文件对象还提供了,许多其他方法用来操作文件,比如写方法

文件对象.write(str)	

操作写入方法的时候,要注意,流中的 str 不一定必须是字符串,可以是二进制数据,且该方法不会自动增加换行符号

# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
 
# 关闭打开的文件
fo.close()

在文件中会有如下内容:
www.runoob.com!
Very good site!

文件对象还提供了,读取内容的方法,read()

文件对象.read(num)	读取文件,num是字节个数,不写时读取所有内容

# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
# 关闭打开的文件
fo.close()

读取的字符串是 :  www.runoob

当然还有readline方法可以读取一行,在你要读取的文件很大的时候,就不在适合使用read了,且readline返回的字符串中包含换行符

file = open('foo.txt', 'r' )

while True:
 	text_line = file.readline()
    if text_line:
		print(text_line)
    else:
        break

readline函数还可以传入一个参数,和read的num一样意义的参数,控制读取的字节大小,不过一般不用,毕竟只读取一行数据

当然Python还有一个readlines函数,它的使用有些风险,因为它读取的也是整个文件,不过他的返回结果是一个列表,把每一行数据包含换行符作为列表的每一个元素

文件内容:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com

fo = open("runoob.txt", "r")
print "文件名为: ", fo.name
 
for line in fo.readlines():                          #依次读取每行  
    line = line.strip()                             #去掉每行头尾空白  
    print "读取的数据为: %s" % (line)
 
# 关闭文件
fo.close()

说了读取方法就不得不说,文件定位了,也就是光标读取文件时的位置

tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。

seek(offset [,from])方法改变当前文件的位置。offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
 
# 查找当前位置
position = fo.tell()
print "当前文件位置 : ", position
 
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print "重新读取字符串 : ", str
# 关闭打开的文件
fo.close()

结果:
读取的字符串是 :  www.runoob
当前文件位置 :  10
重新读取字符串 :  www.runoob

文件除了读写,最基本的还有重命名与删除

import os , shutil
os.rename(current_file_name, new_file_name)		重命名方法的两个参数,分别是带文件名的新旧路径

os.remove(file_name)		删除一个文件

shutil.move()	移动文件

当然 我们导入的 os 模块还有着相当多实用的方法

os.mkdir(newdir)		建立一个新的目录,注意该方法只能新建目录,想新建文件可以考虑open方法

os.chdir(newdir)		这个方法用来设置当前程序操作的当前路径,用的比较少

os.getcwd()		该方法用来显示当前路径,对于Python程序来说叫做当前工作目录

os.rmdir(dirname)		该方法用来删除一个目录,但是注意删除一个目录前,它的子数据应该是被删除的

os.listdir(目录)		获取目录下的所有文件名

shutil模块:是python内置的高级的文件、文件夹、压缩包处理模块

shutil.copyfile(src,dst) 
将src复制到dst中去,dst一定要具有读写权限,如果dst已经存在会被覆盖,src和dst必须是文件,不可以是目录。

shutil.move(src,dst)
移动文件、目录。或者文件、目录重命名,如果dst存在,则不可覆盖。

shutil.copt(src,dst)
复制一个文件到一个文件或一个目录,src必须是文件,dst是文件或者目录

shutil.copy2(src,dst)
在copy的基础上再复制文件最后访问时间和修改时间也复制过来,但是创建时间是不会和源文件一样的。

shutil.copytree(olddir,newdir,True/False)
把olddir拷贝一份newdir,如果第三个参数是True,则复制目录时将保持文件夹下的符号链接,如果地3个参数时False,则将在复制的目录下生成物理副本来代替符号连接

文件对象和我们上面导入的 os 模块相互配合可以实现很多操作,用到时具体的大家可以在网上找找,推荐大家可以看看菜鸟教程的, 文件对象API --------- os 对象API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667998.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flask-slqalchemy使用详解

目录 1、flask-sqlalchemy 1.1、flask_sqlalchemy 与sqlalchemy 的关系 1.1.1、 基本定义与用途 1.2、flask_sqlalchemy 的使用 1.2.1、安装相关的库 1.2.2、项目准备 1.2.3、创建ORM模型 1.2.3.1、使用db.create_all()创建表的示例 1.2.3.2、创建多表关联ORM模型 1.…

每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)

相遇 原题链接登录—专业IT笔试面试备考平台_牛客网 题目描述 运行代码 #include<iostream> using namespace std; int main(){ int a,b; cin>>a>>b; if(ab) { cout<<"p"; } else if(a - b 1 || (a 1 && b 3)){cout <<…

【图像增强处理工具】软件使用说明书

软件使用说明书 软件名称 图像增强处理工具 软件简介 该软件是一个基于 PySide6 和 OpenCV 的图像处理工具,用户可以通过 GUI 界面来执行图像的旋转、平移和镜像操作,并将处理后的图像保存到指定路径。 运行软件须知 确保 ui_form.py 文件在同一目录下,该文件包含了通…

鸿蒙实现汉字转拼音

1.使用三方库 pinyin-pro 地址&#xff1a;OpenHarmony三方库中心仓 亲测可用&#xff0c;一共三个关于 转pinyin的库&#xff0c;一个无法使用&#xff0c;另一个时间太久。 ohpm i pinyin-proimport { pinyin } from pinyin-pro;// 获取带音调拼音 pinyin(汉语拼音); // …

11Linux学习笔记

Linux 实操篇 目录 文章目录 Linux 实操篇1.rtm包&#xff08;软件&#xff09;1.1 基本命令1.2 基本格式1.3安装rtm包1.4卸载rtm包 2.apt包2.1 基本命令结构2.2 常用选项2.3常用命令 1.rtm包&#xff08;软件&#xff09; 1.1 基本命令 1.2 基本格式 1.3安装rtm包 1.4卸载r…

webman-admin多图上传预览和删除

前言 在webmen文档和论坛中都没找到多图上传的示例&#xff0c;自己找了一个&#xff0c;整合了一下凑合用 insert页面 引入css <link rel"stylesheet" href"/app/admin/admin/css/muti-upload.css" />muti-upload.css内容如下 .uploader-list .ha…

H6922 2.8C-40V (最低启动电压2.5V)升压BOOST恒压芯片 5V12V24V升压IC

H6922升压BOOST恒压芯片是一款2.8C-40V &#xff08;最低启动电压2.5V&#xff09;升压BOOST恒压芯片 5V12V24V升压IC 首先&#xff0c;H6922的宽输入电压范围&#xff08;2.8-40V&#xff09;和低启动电压&#xff08;最低2.5V&#xff09;使其能够适应不同复杂的电源环境。无…

Java网络编程(上)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:Java文件IO&#x1f649; &#x1f439;今日诗词:来如春梦几多时&#xff1f;去似朝云无觅处&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&a…

【前缀和 记忆化搜索】LeetCode1444. 切披萨的方案数

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 动态规划 记忆化搜索 LeetCode1444. 切披萨的方案数 给你一个 rows x cols 大小的矩形披萨和一个整数 k &#xff0c;矩形包含两种字符&#xff1a; ‘A’ &#xff…

【ARM-Linux篇】u-boot编译

嵌入式Linux系统和PC完整的操作系统的对比如下&#xff1a; 一、u-boot简介 uboot是一种通用的引导加载程序&#xff0c;它可以用于多种嵌入式系统&#xff0c;支持多种操作系统&#xff0c;如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备&#xff08…

【Leetcode笔记】40.组合总和II

1. 题目要求 这道题目和39.组合总和不一样的地方在于&#xff1a;数组中含有相同的元素。同样地&#xff0c;结果不能含有重复组合。 拿第一个示例来看&#xff0c; candidates [1, 1, 2, 5, 6, 7, 10]问题在于&#xff1a;第一个path[1(index 0), 2]&#xff0c;绝不能出现…

mysql实战——mysql主从复制管理

一、常见的管理操作 1、查看主库状态 show master status 2、查看从库复制的状态 show slave status 3、在主库上查看从库ip和端口信息 show processlist show slave hosts 4、reset slave、reset master、reset slave all 1、reset master 该命令会执行以下操作&#xff…

JS对象由浅入深

对象 对象&#xff08;Object&#xff09;&#xff1a;JavaScript里的一种数据类型&#xff08;引用类型&#xff09;&#xff0c;也是用于存储数据的 好处&#xff1a;可以用来详细的描述某个事物&#xff0c;是用键值对形式存储语义更明了 特点&#xff1a;对象数据是无序的&…

C++程序命令行参数学习

argc是参数个数&#xff1b; argv[0]是程序名&#xff0c;argv[1]是第一个参数&#xff1b; 如果输入osgptr1 x &#xff0c;osgptr1是程序名&#xff0c;argc是2&#xff1b; 不算程序名&#xff0c;实际的参数个数是argc-1&#xff1b; #include <iostream>using …

Microsoft Fabric 是什么?

最近半个月没有更新内容&#xff0c;原因是什么呢&#xff1f; 原因是花了两周的时间备考了一下"Microsoft Certified: Fabric Analytics Engineer Associate"的考试认证。 非常幸运考试通过了。 那什么是Microsoft Fabric 呢&#xff1f; Microsoft Fabric 是一个…

统信UOS SSH服务升级(ubuntu20)内网

服务器配置 系统信息 SSH版本 目标版本 openssh-server_8.2p1-4_arm64.deb 因为不通互联网&#xff0c;所以所有deb包需要手动下载&#xff08;可以连接互联网的可以自动忽略手动下载deb步骤&#xff0c;直接apt-get install xxx 即可&#xff09; 升级步骤 !!!deb下载方式…

Vue.js - 生命周期与工程化开发【0基础向 Vue 基础学习】

文章目录 Vue 的生命周期Vue 生命周期的四个阶段Vue 生命周期函数&#xff08;钩子函数 工程化开发 & 脚手架 Vue CLI**开发 Vue 的两种方式&#xff1a;**脚手架目录文件介绍项目运行流程组件化开发 & 根组件App.vue 文件&#xff08;单文件组件&#xff09;的三个组成…

【JMeter接口自动化】第2讲 Jmeter目录结构

JMeter的目录结构如下&#xff1a; bin目录&#xff1a;可执行文件目录&#xff0c;启动jmeter时&#xff0c;就是启动bin目录下的ApacheJmeter.jar&#xff0c;jmeter.bat&#xff0c;jmeter.sh ApacheJmeter.jar:启动文件 jmeter.bat&#xff1a;Windows 的启动命令。 jmeter…

【Leetcode每日一题】 综合练习 - 组合(难度⭐⭐)(78)

1. 题目解析 题目链接&#xff1a;77. 组合 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 题目要求我们从 1 到 n 的整数集合中选择 k 个数的所有组合&#xff0c;且组合中的元素不考虑顺序。这意味着集合 [1, 2] 和…

控制障碍函数CBF详解(附带案例实现)

控制障碍函数CBF详解&#xff08;附带案例实现&#xff09; 文章目录 控制障碍函数CBF详解&#xff08;附带案例实现&#xff09;1. Control Affine System2. Lyapunov Theory, Nagumos Theory, Invariance Principle3. Control Lyapunov Function (CLF) and CLF-QP4. Control …