博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 文件对象,函数基础,模块基础
阅读量:3942 次
发布时间:2019-05-24

本文共 7025 字,大约阅读时间需要 23 分钟。

文件对象

文件打开方法

  • open及file内建函数
1.作为打开文件之门的"钥匙”,内建函数open()以及file()提供了初始化输入/输出( I/O )操作的通用接口2.成功打开文件后时候会返回一个文件对象,否则引发一个错误3.open()方法和file()方法可以完全相互替换4.基本语法:file_object = open(file_name, access_mode='r', buffering=-1)
  • 文件对象访问模式
文件模式			操作r			以读方式打开(文件不存在则报错)w			以写方式打开(文件存在则清空,不存在则创建)a			以追加模式打开(必要时创建新文件)r+			以读写模式打开(参见r )w+			以读写模式打开(参见w )a+			以读写模式打开(参见a )b			以二进制模式打开
# 练习filename = input("filepath: ")fp = open(filename, mode = 'rb')file_str = fp.read()fp.close()print(file_str, end="")

文件输入

  • read方法
1.read()方法用来直接读取字节到字符串中,最多读取给定数目个字节2.如果没有给定size参数(默认值为-1 )或者size值为负,文件将被读取直至末尾>>> data = fobj.read()>>> print(data)
  • readline方法
1.读取打开文件的一行(读取下个行结束符之前的所有字节)2.然后整行,包括行结束符,作为字符串返回3.它也有一个可选的size参数,默认为-1 ,代表读至行结束符4.如果提供了该参数,那么在超过size个字节后会返回不完整的行>>> data = fobj.readline()>>> print(data)
  • readlines方法
readlines()方法读取所有( 剩余的)行然后把它们作为一个字符串列表返回>>> data = fobj.readlines()>>> print(data)
  • 文件迭代
1.如果需要逐行处理文件,可以结合for循环迭代文件2.迭代文件的方法与处理其他序列类型的数据类似>>> fobj = open('star.py')>>> for eachLine in fobj:    print(eachLine, end= "")

文件输出

  • write方法
1.write()内建方法功能与read()和readline()相反。它把含有文本数据或二进制数据块的字符串写入到文件中去2.写入文件时,不会自动添加行结束标志,需要程序员手工输入>>> fobj.write('Hello World!\n')13
  • writelines方法
1.和readlines()- -样,writelines()方法是针对列表的操作2.它接受一个字符串列表作为参数,将它们写入文件3.行结束符并不会被自动加入,所以如果需要的话,必须在调用writelines()前给每行结尾加上行结束符>>> fobj.writelines(['Hello World!\n', 'python programing\n'])

操作文件

  • with子句
1.with语句是用来简化代码的2.在将打开文件的操作放在with语句中,代码块结束后,文件将自动关闭>>> with open('foo.py') as f:    data = f.readlines()    >>> f.closedTrue
  • 文件内移动
1.seek(offset[ whence]) :移动文件指针到不同的位置	一 offset是相对于某个位置的偏移量    一 whence的值, 0表示文件开头, 1表示当前位置, 2表示文件的结尾2.tell() :返回当前文件指针的位置
  • 标准文件
1.程序一执行,就可以访问三个标准文件	- 标准输入:一般是键盘,使用sys.stdin    - 标准输出:一般是显示器缓冲输出,使用sys.stdout    - 标准错误:一般是显示器的非缓冲输出,使用sys.stderr>>> import sys>>> sys.stdout.write('hello world!\n')hello world!>>> hi = sys.stdin.readline()hello>>> hi'hello\n'

函数基础

函数基本操作

  • 函数基本概念
1.函数是对程序逻辑进行结构化或过程化的一种编程方法2.将整块代码巧妙地隔离成易于管理的小块3.把重复代码放到函数中而不是进行大量的拷贝,这样既能节省空间,也有助于保持一致性4.通常函数都是用于实现某一种功能
  • 创建函数
1.函数是用def语句来创建的,语法如下:def function_name(arguments):    "function_documentation_string"    function_body_suite2.标题行由def关键字, 函数的名字,以及参数的集合(如果有的话)组成3.def 子句的剩余部分包括了一个虽然可选但是强烈推荐的文档字串,和必需的函数体
  • 调用函数
1.同大多数语言相同, python用一-对圆括号调用函数2.如果没有加圆括号,只是对函数的引用>>> def foo():    print("hello")    >>> foo()hello>>> foo
  • 函数的返回值
1.多数情况下,函数并不直接输出数据,而是向调用者返回值2.函数的返回值使用return关键字3.没有return的话,函数默认返回None>>> def foo():    	res = 3 + 4>>> i = foo()>>> print iNone# 练习 1>>> def funcl(i):    x = i ** 2    return x>>> funcl(15)225>>> y = funcl(15)>>> y225# 练习 2>>> def funcl(i):    x = i ** 2    print(x)>>> y = funcl(15)225>>> y

函数参数

  • 定义参数
1.形式参数	函数定义时,紧跟在函数名后(圆括号内)的参数被称为形式参数,简称形参。由于它不是实际存在变量,所以又称虚拟变量2.实际参数	在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为"实际参数",简称实参
  • 传递参数
1.调用函数时,实参的个数需要与形参个数一致2.实参将依次传递给形参>>> def foo(x, y):    print('x=%d, y=%d' % (x, y))>>> foo()Traceback (most recent call last):    File "
", line 1, in
TypeError: foo() takes exactly 2 arguments (0 given)>>> foo(3)Traceback (most recent call last): File "
", line 1, in
TypeError: foo() takes exactly 2 arguments (1 given)>>> foo(3, 4)x=3, y=4# 练习def login_check(username, password): default_username="root" default_password="123456" if default_username == username and default_password == password: return Truewhile True: username = input("请输入用户名:") password = input("请输入密码:") if login_check(username, password): break else: print("login failure !", end="\n\n")
  • 位置参数
1.与shell脚本类似,程序名以及参数都以位置参数的方式传递给python程序2.使用sys模块的argv列表接收[root@666 ~]# vim args.py#!/usr/bin/env python3import sysprint sys.argv[root@666 ~]# ./args.py hello world[./args.py', 'hello', 'world'] # 练习 import sysdef fib(n):    fib_list = [0, 1]    if n > 2:        for i in range(n-2):            x = fib_list[-1] + fib_list[-2]            fib_list.append(x)    return fib_list# mainalist = fib(int(sys.argv[1]))print(alist)]# def2.3.py 13[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]# 练习 函数-拷贝文件import sysdef copy(src_file, dest_file):    src_fp = open(src_file, 'rb')    dest_fp = open(dest_file, 'wb')    while True:        data = src_fp.read(1048576)        if data:            data_fp.write(data)        else:            break        src_fp.colse()        dest_fp.colse()copy(sys.argv[1],sys.argv[2])]# copy.py /etc/hosts /tmp/zhuji.txt# 练习print("替换变量”, 变量值)      %s	字符串      %d	整数      %f	浮点      %x	十六进制>>> print("%d", 100.123)%d 100.123>>> print("%d" % 100.123)100>>> print("%f" % 100)100.000000>>> print("%x" % 100)64>>> print("%.2f" % 100)100.00>>> print("%5d" % 100)  100# 练习 函数-九九乘法表def mtable(n):    for i in range(1,  n+1):        print("%dx%d=%d" % (i,n,i*n), end="\t")for x in range(1, 10):    mtable(x)    print("")
  • 默认参数
1.默认参数就是声明了默认值的参数2.因为给参数赋予了默认值,所以在函数调用时,不向该参数传入值也是允许的>>> def pstar(num = 30):    print('*' * num)    >>> pstar()***************************************>>> pstar(40)***************************************

模块基础

定义模块

  • 模块基本概念
1.模块是从逻辑上组织python代码的形式2.当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互3.这些代码片段相互间有一定的联系,可能是一个包含数据成员和方法的类,也可能是一组相关但彼此独立的操作函数
  • 创建模块
1.模块物理层面上组织模块的方法是文件,每一个以.py作为结尾的python文件都是一个模块2.模块名称切记不要与系统中已存在的模块重名3.模块文件名字去掉后面的扩展名( .py )即为模块名# 练习 1(foot_list.py[名字])def mtable(n):    for x in range(1, n+1):        for i in range(1,  x+1):            print("%dx%d=%d" % (i,n,i*n), end="\t")        else:            print("")# 练习 2>>> import foot_list>>> dir(foot_list)['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'mtable']>>> foot_list.mtable(9)1x9=91x9=9   2x9=181x9=9   2x9=18  3x9=271x9=9   2x9=18  3x9=27  4x9=361x9=9   2x9=18  3x9=27  4x9=36  5x9=451x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=541x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=631x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=721x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81

使用模块

  • 导入模块( import )
1.使用import导入模块2.模块被导入后,程序会自动生成pyc的字节码文件以提升性能3.模块属性通过"模块名属性"的方法调用4.如果仅需要模块中的某些属性,也可以单独导入>>> import sys>>> import os, string>>> string.digits'0123456789'>>> from random import randint>>> randint(1,10)3# 练习import foot_listimport os, sysfoot_list.mtable(9)
  • 模块加载( load )
1.一个模块只被加载一 次,无论它被导入多少次2.只加载一-次可以阻止多重导入时代码被多次执行3.如果两个文件相互导入,防止了无限的相互加载4.模块加载时,顶层代码会自动执行,所以只将函数放入模块的顶层是良好的编程习惯
  • 模块导入的特性
1.模块具有一个 __name__ 特殊属性2.当模块文件直接执行时,__name__的值为'__main__'3.当模块被另一个文件导入时, __name__的值就是该模块的名字[root@666 ~]# vim foo.py#!/usr/bin/env python3print(__name__)[root@666 ~]# ./foo.py__main__[root@666 ~]# python>>> import foofoo

生成随机密码

1.编写一个能生成8位随机密码的程序2.使用random的choice函数随机取出字符3.改进程序,用户可以自己决定生成多少位的密码
# 练习 1import randomallchr = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM-_#'pwdstr = ''for i in range(8):    pwdstr += random.choice(allchr)print(pwdstr)# 练习 2from random import choiceimport stringall_chs = string.ascii_letters + string.digitsdef gen_pass(n=8):    result = ''    for i in range(n):        ch = choice(all_chs)        result += ch    return resultif __name__ == '__main__':    print(gen_pass())    print(gen_pass(4))    print(gen_pass(10))

转载地址:http://ihnwi.baihongyu.com/

你可能感兴趣的文章
发现一个好工具记录一下,U盘启动ISO文件。
查看>>
centos7下配置网卡以及查询网卡UUID
查看>>
适用于旧计算机的10款最佳轻量级Linux发行版
查看>>
在VMware Workstation中批量创建上千台虚拟机
查看>>
linux常用软件收集
查看>>
linux查看桌面环境
查看>>
centos8安装ntfs-3g后,不能自动挂载U盘(NTFS格式)
查看>>
Linux安装显卡驱动
查看>>
使用minicom
查看>>
linux常用外设-打印机指纹和蓝牙的安装管理
查看>>
记录一下安装在移动硬盘上的fedora linux v33在各种笔记本下的兼容性
查看>>
关于安装系统后不能启动的问题!
查看>>
U盘的挂载过程-先记录一下
查看>>
python程序启动过程报错的排错一般步骤
查看>>
linux下UEFI的管理
查看>>
类thinkpad笔记本安装deepinv20后启动黒屏的解决
查看>>
利用本地centos镜像升级centOS
查看>>
FreeBSD常用操作
查看>>
VC及esxi升级的必要性和步骤
查看>>
hp DL338服务器修改ilo管理地址
查看>>