Python文件对象

一 文件管理
    1.1  文件:一首歌  一部电影  一篇文章   写过的python脚本
    
    1.2 文件的操作流程
          1. 打开文件 open(“文件名”,“打开方式”)
          r    以读方式打开(文件不存在则报错)
          w    以写方式打开(文件存在则清空,不存在则创建)
          a    以追加模式打开(必要时创建新文件)
          r+   以读写方式打开(文件不存在则报错) 
          w+   以读写方式打开(文件不存在则报错)
          a+   以读写方式打开(文件不存在则报错)  
          b    以二进制模式打开
     2. 读/写文件 read()/write()
       3. 关闭文件 close()
      
 ●  read() 函数的使用
  
>>> f = open("/code/a.txt",'r')
>>> data=f.read()
>>> f.read()
''
>>>f.close()
>>> type(data)
<class 'str'>
>>> print(data)

>>> f = open("/code/a.txt",'r')
>>> f.read(4)
'root'
>>> f.read()  #读剩下的所有


● readline() 函数的使用
>>> f = open("/code/a.txt",'r')
>>> f.readline()
'root:x:0:0:root:/root:/bin/bash\n'
>>> 
>>> f.readline()
'bin:x:1:1:bin:/bin:/sbin/nologin\n'
>>> 
>>> f.readline()
'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n'
>>> 
>>> f.readline()
'adm:x:3:4:adm:/var/adm:/sbin/nologin\n'
>>> 
>>> f.readline()
'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n'
>>> f.readline()
''
>>> f.close()
>>> 


● readlines()  #读取所有(剩余的)行
>>> f = open("/code/a.txt",'r')
>>> data = f.readlines()
>>> type(data)
<class 'list'>
>>> print(data)
['root:x:0:0:root:/root:/bin/bash\n', 'bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n', 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n']
>>> 

>>> data[0]
'root:x:0:0:root:/root:/bin/bash\n'
>>> 
>>> data[1]
'bin:x:1:1:bin:/bin:/sbin/nologin\n'
>>> 
>>> for  x in  data:
...     print(x)
... 
root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

>>> 

[root@teacher code]# cat 3_1.py 
f = open("/code/a.txt",'r')
data = f.readlines()

for x  in  data:
        print(x)

[root@teacher code]# 

● write() 向文件添加内容

>>> f = open('/code/c.txt','w')
>>> f.write('ABCDE\n')
6
>>> f.write('23456\n')
6
>>> f.close()
>>> 

writelines() 向文件添加内容
>>> f = open('/code/c.txt','a')
>>> f.writelines(["wo kun le \n","bix shui \n"," xue bu hui\n"])
>>> f.writelines(["wo kun le \n","bix shui \n"," xue bu hui\n"])
>>> f.close()
>>> 

● 关闭文件
close()   closed   with 

● seek(offset[, whence]):移动文件指针到不同的位置

offset是相对于某个位置的偏移量

whence的值,0表示文件开头,1表示当前位置,2表示文件的结尾

● tell():返回当前文件指针的位置

>>> f = open('/code/c.txt','r')
>>> f.tell()
0
>>> f.seek(0,2)
83
>>> f.tell()
83
>>> f.read()
''
>>> f.seek(0,0)
0
>>> f.read(10)
'dafafABCDE'
>>> f.tell()
10
>>> 

● with 子句 可以把打开的文件自动关闭
>>> with open("/code/c.txt",'r') as fobj:
...     data = fobj.readlines()
... 
>>> fobj.closed
True
>>> print(data)
['dafafABCDE\n', '23456\n', 'wo kun le \n', 'bix shui \n', ' xue bu hui\n', 'wo kun le \n', 'bix shui \n', ' xue bu hui\n']
>>> 

● 模拟cp操作

步骤一:编写脚本

 [root@localhost day03]# vim cp.py
 f1 = open('/bin/ls', 'rb')
 f2 = open('/root/ls', 'wb')
 data = f1.read()
 f2.write(data)
 f1.close()
 f2.close()

【●】函数基础

一、函数基本操作

1.函数基本概念

●函数是对程序逻辑进行结构化或过程化的一种编程方法 ●什么是函数,是可以重复执行的语句块,可以重复调用 2.作用 ● 用于封装语句块,提高代码的重要性

3.创建函数 ● 函数使用def语句来创建的,语法格式如下:

def 脚本名字():

#定义函数say() def say(): #功能 输出6次 我爱你中国 for i in range(6): print("我爱你中国") print("_" * 50) #输出分隔线 say() #第一次调用函数 say() #第二次调用 say() #第三次调用函数

● 标题行有def关键字,函数的名字,以及参数的集合(如果有的话)组成

  1. 调用函数 ● 同大多数语言相同,Python用一对圆括号调用函数 ● 如果没有加圆括号,只是对函数的引用

  2. 函数的返回值 ● 多数情况下,函数并不直接输出数据,而是向调用者返回值 ● 函数的返回值使用 return 关键字 ● 没有 return 的话,函数默认返回 None(无)

    (1)

    #定义函数say()

    def say():

    for i in range(6): print("我爱你中国") print("_" * 50) # 输出分隔线 return "ok" x= say() print(x)

(2)

#功能计算数字10+10的和 def numsum(): s = 10 + 10 print("10 + 10 =",s) return s k= numsum() print(k)

[root@dc python]# python3 3.py 10 + 10 = 20 20

二、函数参数 1.定义函数 ●形式参数 ——函数定义时,紧跟在函数名后(圆括号内)的参数被称为形式参数,简称形参。由于他不是实际存在变量,所以又称虚拟变量

●实际参数

——在住调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)成为实际参数,简称实参。

def numsum(a,b): #形参 s = a + b print(a , "+" , b , "=" , s)

numsum(20,30) #实参 numsum(50,60) numsum(40,80)

[root@dc python]# python3 3.py 20 + 30 = 50 50 + 60 = 110 40 + 80 = 120

2.传递参数 ●调用函数时,实参的个数需要与形参个数一致 ●实参将依次传递给形参

def numsum(a,b): #形参 s = a + b print(a , "+" , b , "=" , s)

numsum(20,30) #实参 numsum(50,60) numsum(40,80)

[root@dc python]# python3 3.py 20 + 30 = 50 50 + 60 = 110 40 + 80 = 120

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

#功能计算任意个数相加的和的脚本  可以执行脚本输入 要计算的数
  import sys
  x=sys.argv
  y = 1
  sum = 0
  while    y < len(x)
       sum += int(x[y])
        y += 1
  print("相加的和:",sum)
  
  import sys
  x=sys.argv
  y = 1
  sum = 0
  for y in range(1,len(x))
       sum += int(x[y])
        y += 1
  print("相加的和:",sum)

[root@dc python]# python3 4.py 60 70 70 相加的和: 200

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

#给函数的参数设置默认值,如果有多个形参默认值要在参数列表的末尾 #功能输出指定个数的一条线 def lines(y,x=20): print("形参y的值:",y) print("" * x)

lines(45) lines(50,60)

[root@dc python]# python3 5.py 形参y的值: 45


形参y的值: 50


#星号 * 变成了横线

●案例一、 编写脚本jsq.py 计算器练习题 能够对任意个数 单元 + — * / jslx = input("请选择你要做什么运算: + - * / ")

L = [] while True: x = input("请输入要计算的数字,敲回车结束输入") if x == "": break L.append(x) def he(): x = 0 #累加的和 y = 0 #定义循环结构的初值 while y < len(L): x += int(L[y]) y += 1 print("相加的和 = ", x)

def cha(): x = int(L[0]) #做减法计算的初值 for y in range(1,len(L)): x -= int(L[y]) print("相减的差 = ",x)

def ji(): x = int(L[0]) #做乘法计算的初值 for y in range(1,len(L)): x *= int(L[y]) print("相乘的积 = ",x)

def shang(): x = int(L[0]) #做除法计算的初值 for y in range(1,len(L)): x //= int(L[y]) print("相除的商 = ",x)

if jslx == "+": he() elif jslx == "-": cha() elif jslx == "*": ji() elif jslx == "/": shang()

【●】模块基础

一、定义模块 1.模块基本概念 ●模板是从逻辑上组织Python代码的形式。 ●当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互。 ●这些代码段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数。

2.创建模块 ●模板物理层面上组织模块的方法是文件,每一个以.py作为结尾的Python文件都是一个模块 ●模块名称切记不要与系统中已存在的模块重名 ●模块文件名字去掉后面的扩展名(.py)即为模块名 3.作用 把相关功能的函数等放在一起有利于管理,有利于多人合作开发 4.模块分类 ● ● ● ●

二、使用模块 1.导入模块 ●使用 import 导入模块 import + 模块名称(里面所有内容)

●模块属性通过“模块名.属性”的方法调用 import + 某个工具名称(如 os,string)

●如果仅需要模块中某些属性,也可以单独导入 from random import randint

[root@dc python]# python3

import sys #模块名称 import os,string string.digits '0123456789' from random import randint randint(1,10) 7

2.模块加载(load) ●一个模块只被加载一次,无论它被导入多少次 ●只加载一次可以阻止多重导入时代码被多次执行 ●如果两个文件相互导入,防止了无限的相互加载 ●模块加载时,顶层代码会自动执行,所以只会将函数放入模块的顶层是良好的编程习惯

3.模块导入的特性 ●模块具有一个 __ name __ 特殊属性 ●当模块文件直接执行时,__ name __ (两个下划线)的值为' __ main __ ' ●当模块被另一个文件导入时,__ name __ 的值就是该模块的名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值