python基础(三)

前言

本文记录了python的文件读写操作和函数相关内容

一、文件读写操作

1、文件打开方式

内建函数 open()提供了初始化输入/输出(I/O)操作的通用接口,成功打开文件后时候会返回一个文件对象,否则引发一个错误。要以任何方式使用文件-----哪怕仅仅是打印其内容,都得先打开打文件,这样才能访问它。

基本语法 :

file = open(file_name, mode=‘r’)
参数介绍 :
file : 定义打开后文件在python环境中的变量名,文件操作对象
file_name : 表示打开的文件的路径
mode:表示打开文件的方式

mode操作
r以读方式打开(文件不存在则报错)
w以写方式打开(文件存在则清空,不存在则创建)
a以追加模式打开
b以二进制模式打开

2、文件读操作

要使用文本文件中的信息,首先需要将信息读取到内存中。为此,我们可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。

read函数

open函数打开文件后使用read函数可以一次性读入并返回文件所有内容
close函数关闭文件,如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问
ps:使用read函数,会把文件指针移动到文件末尾

以读的方式打开文件
fr = open("/etc/hosts", mode="r")
# 读取前5个字符
print(fr.read(5))
# 接着读3个字符
print(fr.read(3))
# 读取剩余所有内容
print(fr.read())
# 再次使用read什么都读不到,因为已经在文件末尾
print(fr.read())
# 关闭文件
fr.close() 

文件指针

文件指针标记读取数据的起始位置,第一次打开文件会指向文件头,使用read后文件指针会移动到读取内容的末尾,不指定数量相当于全部读取,直接指向文件末尾,重新打开文件则会重新指向文件头

readline函数,按行读取

使用readline函数可以避免一次性将比较大的文件一次读取对内存的占用过大,readline函数一次读取一行,执行后,文件指针指向下一行数据,准备再次读取

# 读第一行
print(fr.readline(), end="")
# 读第二行
print(fr.readline(), end="")

readline判断文件读取完毕

# 打开文件
fr = open("/etc/passwd", mode="r")
# 读取文件 
# 死循环
while True:  
# 某一行数据
    data = fr.readline()
# 文件读取完毕,终止循环  
    if len(data) == 0:  
        break
    print("data:", data, end="")
# 3.关闭资源
fr.close()

readlines函数

readlines函数将剩余所有行写入到一个字符串列表返回,可以结合for循环迭代处理

data = fr.readlines()
for i in fr : 
	print(item, end="")

3、文件写操作

write函数

write()内建方法功能与read()和readline()相反,它把含有文本数据或二进制数据的内容写入到文件中去

# 以写方式打开文件
fw = open("/opt/dc.txt", mode="w")
# 写文件
fw.write("hello world\n")
fw.write("you are my best friend\n")
# 关闭文件
fw.close() 

writelines函数

和readlines()一样,writelines()方法是针对列表的操作,它接受一个字符串列表作为参数,将他们写入文件,行结束符并不会被自动加入,所以如果需要的话,必须再调用 writelines() 前给每行结尾加上行结束符

# 创建个字符串列表
list01 = ["hello\n", "world\n", "nfx\n"]
# 以读方式打开文件
fw1 = open("/opt/tc.txt", mode="w")
# 写文件
fw1.writelines(list01)
# 关闭文件
fw1.close()

拓展

with语句

with语句可以用来简化代码, 将打开文件的操作放在with语句中,代码块结束后,文件会自动关闭

with open('/tmp/passwd', mode="r") as f:
    # 文件的读写操作
    # ......

ps:with相当于将open函数和close函数合在一起变成了一个函数,当函数执行完成后会自动关闭文件,函数中的操作按正常读写流程写就行。

二、函数

函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候 调用,使用函数需要两步:
1、定义函数
2、调用函数

1、定义函数

函数使用def语句创建,语法:

def 函数名(参数列表): 
    """函数说明文档字符串"""
    函数封装的代码
    ……

定义函数使用def(define)关键字,后面接自定的函数名(命名规则同变量一样)。参数列表根据需求,如果需要传递外部参数到函数内,就需要定义参数列表,不需要就可以不写。
函数说明文档可有可无,主要功能为介绍这一个函数的功能,适用方法以及注意事项。为了养成一个良好的代码习惯,建议编写的时候写说明文档。

2、调用函数

使用一对()调用函数,如果没有圆括号,只是对函数的引用,任何输入参数都要放在圆括号里。

eg:
# 定义sum_1函数
def sum_1() :
# 说明文档
    '''计算0到100的和,没有参数,函数名调用'''
# 定义一个变量a并初始化值为0
    a=0
# 编写一个循环计算0100的值
# ps:因为range函数特性从0开始,所以要到100需要101
    for i in range(101) :
# a+=i 相当于a = a + i
       a+=i
# 输出结果
    print(a)
# 调用函数
sum_1()

3、函数的参数

函数的参数,增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据
在函数内部,把参数当做变量使用,进行需要的数据处理
函数调用时,按照函数定义的参数顺序,把希望在函数内部处理的数据,通过参数传递
函数的参数分为形参和实参
形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的
ps:函数外的是实参,是真实的参数。函数内的是形参,是临时参数,也就是形式上的参数。函数外的实参传递到函数内形参也就是一个名称的变化,具体区别为变量的全局和局部变量的区别。

传递参数

在函数名的后面的小括号内部填写参数,多个参数之间使用 ', '分隔,调用函数时,实参的个数需要与形参个数一致,实参将依次传递给形参。

# 定义函数,形参x,y
def sum_1(x, y) :
    '''计算参数x到参数y的和,函数名加参数调用'''
    c=0
    for i in range(x,y+1):
        c+=i
    print("参数a到参数b的和为:", c)
# 获取实参a,b
a=int(input("请输入一个数字a:"))
b=int(input("请输入一个大于a的数字数字b:"))
# 调用函数并将实参a,b传递到函数中变化为形参x,y
sum_1(a,b)

位置参数

与shell脚本类似,程序名以及参数都以位置参数的方式传递给python 程序,使用sys模块的argv列表接收

# 编写python输出文件名,和命令行参数
#!/usr/bin/python3
import sys
for i in sys.argv :
    print(i)
# 命令行
[test01@server1 day3]$ ./hanshu.py zhangsan lisi wangwu 2342 
# 输出,第一个为文件名,默认为第一个,后面为命令行输入参数
./hanshu.py
zhangsan
lisi
wangwu
2342


默认参数

默认参数就是声明了默认值的参数,因为给参数赋予了默认值,所以在函数调用时,不向该参数传入值也是允许的

def jsq(num1, num2, mode1='+'):
    '''计算num1和num2,有加法和减法两种,默认为加法,调用方法,函数名加参数调用'''
    if mode1 == '+':
        print(num1+num2)
    if mode1 == '-':
        print(num1-num2)
# 调用函数,不输入参数会使用默认参数,输入参数使用输入参数
jsq(1234,2234)
jsq(342,234,'-')
# 输出
3468
108

函数返回值

在程序开发中,有时候,会希望一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理,返回值是函数完成工作后,最后给调用者的一个结果,在函数中使用 return 关键字可以返回结果,调用函数一方,可以使用变量来接收函数的返回结果
ps:return表示返回,表示方法执行结束,后续的代码都不会被执行
如果方法内部没有return语句,那么会默认返回None,即return None

def sum_2(x):
    '''计算从0到x(包含)之间有多少个奇数'''
    y=0
    for i in range(x+1):
        if i % 2 == 1:
            y+=1
    return y
a=int(input("请输入一个数a:"))
b=sum_2(a)
print("0到"+str(a)+"之间有"+str(b)+"个奇数")
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值