Python系列之文件操作和函数

news2024/10/6 14:29:21

    感谢点赞和关注 ,每天进步一点点!加油!

目录

一、文件操作

1.1 Shell里的文件操作

1.2 Python文件操作的步骤

1.3 Python打开和关闭文件

1.3.1 open 函数

1.4 文件定位

1.5 Python文件访问模式

1.5.1 只读模式

1.5.2 只写模式

1.5.3 只追加模式

1.5.4 比较r+,w+,a+三种模式

二、函数

2.1 Shell里的函数

2.2 Python 函数

2.2.1 定义一个函数

2.2.2 函数传参

2.2.3 python 传不可变对象实例

2.2.4 传可变对象实例

2.2.5 参数


一、文件操作


1.1 Shell里的文件操作


shell里主要就是调用awk,sed命令来处理文件, 特别是sed命令可以使用sed -i命令直接操作文件的增,删,改。

1.2 Python文件操作的步骤


python文件的操作就三个步骤:

  1. open打开一个要操作的文件
  2. 操作此文件(读,写,追加等)
  3. close关闭此文件

1.3 Python打开和关闭文件


Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。

1.3.1 open 函数

用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。

语法:

file object = open(file_name [, access_mode][, buffering])

各个参数的细节如下:

  • file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
  • access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
  • buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

1.4 文件定位


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

seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

示例:

fo = open("/root/data02.txt")
print("文件名: ", fo.name)
print( "是否已关闭: ", fo.closed)
print("访问模式: ", fo.mode)
print("光标位置: ", fo.tell())
print("移动光标: ", fo.seek(5))

执行结果:

1.5 Python文件访问模式


访问模式

说明

==r== (read)

只读模式,不能写(文件必须存在,不存在会报错)

==w== (write)

只写模式,不能读(文件存在则会被覆盖内容(要千万注意),文件不存在则创建)

==a== (append)

只追加模式,不能读

r+

读写模式

w+

写读模式

a+

追加读模式

rb

二进制读模式

wb

二进制写模式

ab

二进制追加模式

rb+

二进制读写模式

wb+

二进制写读模式

ab+

二进制追加读模式

1.5.1 只读模式

示例:

# 打开文件
f = open("/root/data.txt", "r")  
# 打印光标位置 从 0 开始
print(f.tell())
# 读取数据
data = f.read()
print(data)
# 打印光标位置
print(f.tell())

# 光标移动到开始从第10位开始打印
f.seek(10)
print(f.tell()) # 打印光标位置
data1 = f.read()
print(data1)   # 打印数据

f.close

执行结果如下:

示例:对比read()、readline() 和readlines()

f = open("/root/data02.txt", "r")

f.seek(5)        # 光标移到第6个字符那里
data1 = f.read() # read是读整个文件在光标后面的所有字符(包括光标所在的那个字符),读完后,会把光标移到你读完的位置

f.seek(5)           # 光标重置到第6个字符那里
data2 = f.readline() # readline是读光标所在这一行的在光标后面的所有字符(包括光标所在的那个字符),读完后,会把光标移到你读完的位置

f.seek(5)		       # 光标重置到第6个字符那里
data3 = f.readlines()  # readlines和read类似,但把读的字符按行来区分做成了列表

f.close()
print(data1)
print("+++++++++++++++++++++++")
print(data2)
print("+++++++++++++++++++++++")
print(data3)

执行结果:

示例: 遍历文件读取文件某一行

f = open("D:\\IPVA\Data_Traffic\\DataServerCloud01_GetCounters\\DataServerCloud01.Device.CounterArea.PointInfo"
         ".20230512122021.txt.COMPLETED", "r")

for index, line in enumerate(f):
    if index == 1:
        print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++")
        # 可以 line 转为字符串 对一行数据进行 处理
        print(index, line.strip())

f.close()

执行结果:

1.5.2 只写模式

示例:

[root@devops IO]# cat fileW.py 

## 文件不存在会创建,存在会清空
f = open("/root/data01.txt","w")

f.write("hello world\n")

f.close
[root@devops IO]# cat /root/data01.txt 
hello world
[root@devops IO]# 

执行结果:

多次执行会覆盖,且如果要读取文件 会抛出异常

1.5.3 只追加模式

示例:

f = open("/root/data01.txt","a")
f.write("hello world\n")
f.close

执行结果:

小结:

  • r: 只读模式 文件必须要存在;
  • w: 只写模式 文件存在则会清空原文件内容再写,不存在则会创建文件再写
  • a: 只追加模式 与w模式的区别为a模式不清空原文件内容,在最后追加写, (文件不存在也会先创建文件)

1.5.4 比较r+,w+,a+三种模式

  • r+文件必须要存在,相当于在只读模式的基础上加了写权限;
  • w+会清空原文件的数据,相当于在只写模式的基础上加了读权限;(可以在任意位置写,但要用seek定位光标,还要区分读光标和写光标)
  • a+不会改变原文件的数据,相当于在只追加模式的基础上加了读权限;(写是在最后写,即使用seek把光标移到前面,仍然会写在最后)


二、函数


2.1 Shell里的函数


示例:

function start() {						# 定义函数名start,前面可以加function也可以不加
	/usr/sbin/sshd
}

stop() {
	kill -15 `cat /var/run/sshd/sshd.pid`
}

reload() {
	kill -1 `cat /var/run/sshd/sshd.pid`
}

restart() {
    stop
    start									# 函数里调函数就是函数的嵌套	
}

case "$1" in
	start )
		start								# 调用start函数
		;;
	stop )
		stop
		;;
	restart )
		restart
		;;
	reload )
		reload
		;;
	* )
		echo "参数错误"
esac

2.2 Python 函数


函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。


2.2.1 定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法:

def funct1():				      # 函数名(),括号里面可以写参数,也可以不写
    """函数说明或注释"""		# 说明或注释可以不写,大型程序为了程序可读性最好写
    print("进水")				  # 函数代码主体
    print("洗衣服")		    # 函数代码主体
    print("脱水")				  # 函数代码主体
    return 0				  # 函数返回值,可有可无 

funct1()				 	# 调用函数的方式(调用函数也就是执行函数内部的代码)

执行结果:

2.2.2 函数传参

可更改(mutable)与不可更改(immutable)对象

在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
  • 可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

python 函数的参数传递:

  • 不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

2.2.3 python 传不可变对象实例

示例:

def ChangeInt( a ):
    a = 10

b = 2
ChangeInt(b)
print(b) # 结果是 2

2.2.4 传可变对象实例

示例:

def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print("函数内取值: ", mylist)
   return
 
# 调用changeme函数
mylist = [10,20,30]
print("列表初始元素: ", mylist)
changeme( mylist )
print("函数外取值: ", mylist)

实例中传入函数的和在末尾添加新内容的对象用的是同一个引用,故输出结果如下:

2.2.5 参数

以下是调用函数时可使用的正式参数类型:

  • 必备参数 必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
  • 关键字参数 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
  • 默认参数 调用函数时,默认参数的值如果没有传入,则被认为是默认值
  • 不定长参数 你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名
# 必备参数
def printme( str ):
   "打印任何传入的字符串"
   print(str)
   return
 
#调用printme函数,你必须传入一个参数
printme("kangll")

# 关键字参数
def printme( name , age):
   "打印任何传入的字符串"
   print(name, str(age) )
   return
 
#调用printme函数
printme( age = 30, name = "My string")

执行结果:

示例:

# 默认参数
def ssh(ip, port = 22):
    print("ssh %s -p %s" % (ip, port))

ssh("10.1.1.15")
print("+++++++++++++++++++")

# 不定长参数
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print("输出: ")
   print(arg1)
   for var in vartuple:
      print(var)
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

执行结果:

参考:Python 函数 | 菜鸟教程 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大厂笔试真题解析

文章目录 2023/5/6 华为第一题:喷墨水2023/5/16 华为第二题:表达式计算 2023/5/6 华为第一题:喷墨水 模拟题,代码未提交,样例过 输入处理:双字节十六进制转二进制 十六进制转十进制再转二进制,…

Baklib盘点:企业做知识管理时遇到的困惑类型有哪些?

作为一家专注于企业知识管理的公司,Baklib深入了解了企业在进行知识管理时可能遇到的各种困惑。在此,我们盘点了企业做知识管理时遇到的困惑类型,并就如何解决这些困惑提出了建议。 企业做知识管理时遇到的困惑类型 知识流失 许多企业面临…

跨时钟域数据同步

跨时钟信号直接传输在信号跳变时违背本地时钟域的时序要求(建立时间约束,保持时间约束),容易产生亚稳态,无法确定亚稳态何时结束以及结束时保持在何种状态上。 用同步器抑制亚稳态的往下传播的概率,根据情…

一文详解Pytorch中的Tensor操作

何为Tensor? Tensor的英文原义是张量,PyTorch官网对其的定义如下: 也就是说,一个Tensor是一个包含单一数据类型的多维矩阵。通常,其多维特性用三维及以上的矩阵来描述,例如下图所示:单个元素为…

CloudCompare二次开发之如何通过PCL进行点云曲面重建?

文章目录 0.引言1.CloudCompare界面设计重建(reconstruct)按钮2.使用贪婪三角化进行曲面重建(Surface_Rec) 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据一系列处理分析,查阅现有网络资料,对常用PCL点云曲面…

SD webui 手记

源代码地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui git拉取代码后,windows下支持根目录直接运行 webui-user.bat,前提本地需要先安装python环境,略过,我们直接跑源码玩 安装依赖 pip install …

Linux 指令(二)+完整思维导图+实图例子+深入细节+通俗易懂建议收藏

绪论 对于指令的学习,是一个漫长的过程,因为一般在后台服务器上为了减少刷新图形化界面消耗资源都是呈现出命令行的形式,对此我们必选要掌握好Linux的指令。今天我们接着上一章的指令来继续学习更多的指令。 话不多说安全带系好,发…

字节给我狠狠上了一课:危机来的时候你连准备时间都没有!

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。甚至还有不少大厂直接…

【Linux】基本指令,拥抱Linux的第一步

[Linux]常见指令 Linux基本指令指令的本质ls指令pwd指令cd指令touch指令mkdir指令(重要)rmdir&&rm指令(重要)man指令(重要)cp指令(重要)mv指令(重要)重定向cat指令more指令less指令(重要…

【C++模板】——template

C模板 模板的引入函数模板函数模板的实例化模板参数匹配原则 类模板类模板的定义格式类模板的实例化 🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 &#x1…

Unity之OpenXR+XR Interaction Toolkit如何自定义VR按键

一.前言 上一篇文章我们介绍了Unity的新版本InputSyste如何使用,这一篇文章,我们主要说一下,在新版基于OpenXR的VR项目中,如何自定义VR按钮的功能。 二.Samples介绍 我们使用XR Interaction Toolkit插件时,它的几个Samples是非常有用的。如下所示: 它们分别是: 1.Sta…

MySQL 教程---菜鸟教程

文章目录 MySQL 教程登录 MySQL数据库操作数据类型创建数据表删除数据表插入数据查询数据 MySQL 教程 关系型数据库管理系统(RDBMS) RDBMS 术语: 数据库:数据库是一些关联表的集合。数据表:表是数据的矩阵。在一个数…

python 中常见变量类型

数值 a 10 b 123 … 字符串 在python中 用单引号’‘和双引号""括起来的都是字符串,不使用引号括起来的不是字符串,字符串是使用最多的数据类型,用来表示一段文本信息。 比如: a ‘123’ b “123” 字符串之间可以用加法运算…

dubbo处理自定义异常

dubbo处理自定义异常 背景 在实际项目中,我们不可避免地需要使用自定义的异常,一般这个异常会继承RuntimeException,然后我们通过RestControllerAdvice注解,拦截业务异常类,做一些处理,但是在使用dubbo构…

六级备考28天|CET-6|听力第三讲|篇章的做题方法与练习法|2022年6月考题9-11题|16:15-17:15

目录 1. 笔记 2. 听力原文复现 (9)问题9 (10)问题10 (11)问题11 08:00开始播放 两/三个选项大面积同时出现了听力中一句话,一般排除这两/三个选项 1. 笔记 2. 听力原文复现 (9)问题9 -What have researchers done for the first time in history? The re…

c++ boost库学习-01-lexical_cast

一、C/C数值转换函数 C/C语言提供了几个标准库函数,可以将字符串、整型浮点型等相互转换。 atof():将字符串转换为双精度浮点型值。 atoi():将字符串转换为整型值。 atol():将字符串转换为长整型值。 itoa():将字符串…

redis的几种集群方式

https://www.zhihu.com/people/pan-zhi-74-31 Redis集群介绍Redis集群一般有四种方式,分别为:主从复制、哨兵模式、Cluster以及各大厂的集群方案。在3.0版本之前只支持单实例模式,3.0之后支持了集群方式。在3.0之前各大厂为了解决单实例Redis…

为Eclipse安装lombok插件

因为原生的Eclipse没有lombok插件,所以即使项目引入了lombok依赖也无法使用Data等常用标签。下面介绍一下如何手动为Eclipse添加lombok插件,具体操作步骤如下: (1)打开Download地址,点击页面中间的超链接下…

k8s集群内带GPU工作节点配置显卡驱动

k8s集群内带GPU工作节点配置显卡驱动 系统为Centos7 一、下载、安装显卡驱动 查看显卡型号 [rootVM-3-9-centos user]# lspci | grep -i nvidia 00:08.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)1.1、官网下载驱动程序 https://www.nvidia.cn/Downlo…

数据分析13——Pandas数据导出/日期数据处理/样本采样

Pandas数据导出 1、导出Excel: 举例: 代码:df.to_excel(‘./data/text_01.xlsx’, sheet_name‘订单明细’, indexFalse)解释:将df数据导入到相对路径为’./data/text_01.xlsx’的文件中,其中数据表名称为’订单明细…