zoukankan      html  css  js  c++  java
  • day6-20180412笔记

    笔记:Python对文件进行操作(读、写、追加),Python的函数

    一、Python对文件进行操作(读、写、追加)

    1、读取文件内容

    文件操作说明:

    文件操作
    参数1: 文件名,可以是文件的绝对路径
    参数2: option r读 w写 b二进制 a追加

    创建一个测试的文本文件,比如:11.txt 内容如下:

    abc
    abcd
    abc23de
    a^&bcdef
    1$23
    123#4
    12345@

    读取11.txt文件的内容

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    
    # 读取文件内容
    fr = open("11.txt", "r")  #“文件名”,r读
    print(fr.read())  #打印输出
    fr.close()  #文件读取完后,自动关闭文件

    以上实例输出的结果

    abc
    abcd
    abc23de
    a^&bcdef
    1$23
    123#4
    12345@

    2、写入文件内容

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    # 声明全局变量的时候,变量名一定要全部大写
    ENCODING = "utf-8"
    
    # 写入文件内容 
    fw = open("11.log", "w", encoding=ENCODING)   #w写,encoding=定义编码,方便代码不管在python2还是python3都能直接执行
    fw.write("hello word
    你咋不上天呢?
    no 作no die!")  #
    换行
    fw.close()

    以上实例输出的结果,在当前目录下创建一个11.log文件,并写入文件内容,内容如下:

    hello word
    你咋不上天呢?
    no 作no die!

    注意:写入文件内容时,如果文件已经存在,会重新对文件进行写入,如果文件不存在,自动创建一个文件,再写入内容 

    3、 追加文件内容

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    # 声明全局变量的时候,变量名一定要全部大写
    ENCODING = "utf-8"
    
    
    # # 追加文件内容
    fw = open("11.log", "a", encoding=ENCODING)     #a追加
    fw.write("
    嗨喽
    咋地?
    bi bi bi...
    so ga!")
    fw.close()

    以上实例输出的结果,会在11.log文件中追加内容:红色字体部分为追加内容

    hello word
    你咋不上天呢?
    no 作no die!
    嗨喽
    咋地?
    bi bi bi...
    so ga!
    文件对象f常用的操作方法:
    read()   把文件的所有内容都读取出来,返回一个字符串
    write("data")   把字符串"data"写入到文件中,只接受字符串参数
    fr.readline() 每次读取文件一行数据,返回每行的字符串数据
    fr.readlines() 读取文件内容,返回一个List,每一行是一个元素
    fr.name    文件名
    fr.fileno()   文件描述符
    fr.close()    关闭文件
    fr.encoding   文件编码
    fr.closed   返回bool值,判断文件是否已经关闭
    fr.seek(offset, whence) offset偏移量正数向后偏移,负数向前偏移 whence 0开头,1现在位置,2代表结束
    fr.tell()   返回文件光标位置
    fr.truncate(size) 只有写文件才可以用,清空文件,size表示清空到什么地方
    help(fr.seek) 控制文件光标,文件需要使用b二进制方式打开

    fr.readline()  使用方法

    11.txt文件内容如下:

    abc
    abcd
    abc23de
    a^&bcdef
    1$23
    123#4
    12345@

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    
    # 读取文件内容
    fr = open("11.txt", "r")  #“文件名”,r读
    # 读取文件内容的每一行
    print(fr.readline())
    print(fr.readline())
    print(fr.readline())
    fr.close()  #文件读取完后,自动关闭文件

    以上实例输出的结果

    abc
    
    abcd
    
    abc23de

    fr.readlines()  使用方法

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    
    # 读取文件内容
    fr = open("11.txt", "r")  #“文件名”,r读
    #以列表的形式读取文件内容
    # print(fr.readlines())
    fr.close()  #文件读取完后,自动关闭文件

    以上实例输出的结果

    ['abc
    ', 'abcd
    ', 'abc23de
    ', 'a^&bcdef
    ', '1$23
    ', '123#4
    ', '12345@']

    fr.tell()  使用方法

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    
    # 读取文件内容
    fr = open("11.txt", "rb")  #“文件名”,r读 b二进制
    print(fr.readline())
    print(fr.readline())
    print(fr.tell())    #返回文件光标位置,
    换行为一个位
    fr.close()  #文件读取完后,自动关闭文件

    以上实例输出的结果

    b'abc
    '  #a-0,b-1,c-2,
    -3,所以第一行就有4个文件光标的位置
    b'abcd
    '  #a-5,b-6,c-7,d-8,
    -9,所以第二行就有5个文件光标位置
    9       #两行相加起来就有9个文件光标位置

    fw.truncate()  使用方法

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    # 声明全局变量的时候,变量名一定要全部大写
    ENCODING = "utf-8"
    
    # 写入文件内容 
    fw = open("11.log", "w", encoding=ENCODING)   #w写,encoding=定义编码,方便代码不管在python2还是python3都能直接执行
    fw.write("hello word
    你咋不上天呢?
    no 作no die!")  #
    换行
    fw.truncate(10)    #保留多少位
    fw.close()

    以上实例输出的结果

    hello word
    读取文件内容,并按行号打印出来
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    # 声明全局变量的时候,变量名一定要全部大写
    ENCODING = "utf-8"
    
    
    
    # 读取文件内容,并按行号打印出来
    fr = open("11.txt", "r", encoding=ENCODING)
    for i, line in enumerate(fr.readlines()):
        print("第{0}行内容为:{1}".format(i, line))
        fr.close()

    以上实例输出的结果

    第0行内容为:abc
    
    第1行内容为:abcd
    
    第2行内容为:abc23de
    
    第3行内容为:a^&bcdef
    
    第4行内容为:1$23
    
    第5行内容为:123#4
    
    第6行内容为:12345@

    with方法

    为了节省每次都需要fr.close()的环节,文件用完以后自动关闭,with我个人还是很喜欢用的。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 20:51
    # @Author  : yangyuanqiang
    # @File    : demon11.py
    
    
    # 声明全局变量的时候,变量名一定要全部大写
    ENCODING = "utf-8"
    
    
    with open("11.txt", "r", encoding=ENCODING) as f:   #冒号接着下一行就是要缩进
        print(f.read())

    以上实例输出的结果

    abc
    abcd
    abc23de
    a^&bcdef
    1$23
    123#4
    12345@

    二、Python的函数

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

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

    Python 定义函数使用 def 关键字,一般格式如下:

    def 函数名(参数列表):
        函数体


    函数定义(声明):
    以关键字def开头,函数名, 参数:回车缩进
    def function(arg1, arg2, ……):
    pass
    函数的就是一种封装的思想,把细小的功能或者可以缩小的功能封装成一种函数
    函数的调用:
    函数名直接传入参数就可以
    function(1, 2, 3)
    arg1, arg2 形参
    1, 2, 3 实参
    def fun(a, *args, **kwargs):
    pass
    *args 代表什么意思 list
    *goushi
    **kwargs 代表什么意思 dict
    **lese
    fun(1, 2, 3, 4, 5 ,a=1, b=2)
    x, y, z, = 1, 2, 3
    a = 1
    args = 2, 3, 4, 5 list 一一对应过来
    kwars ={"a": 1, "b": 2} dict 一一对应过来
    匿名函数:
    add = lambda x, y: x+y
    def add(x, y):
    return x+y

    让我们使用函数来输出"Hello World!":

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/13 22:39
    # @Author  : yangyuanqiang
    # @File    : helloworld.py
    
    
    def hello() :
       print("Hello World!")
    
    hello()

    以上实例输出的结果

    Hello World!
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/12 22:06
    # @Author  : yangyuanqiang
    # @File    : demon22.py
    
    
    
    
    # 阶乘
    def jc(n):
        if n == 0:
            return 1
        else:
            result = 1
            for i in range(1, n+1):
                result *= i
            return result
    
    def main():
        n = 10
        count = 0
        for i in range(0, n+1):
            count += jc(i)
        print("count = {0}".format(count))
    
    
    # 主函数调用主的时候
    if __name__ == '__main__':
        main()

    以上实例输出的结果

    count = 4037914

    函数调用

    定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。

    这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

    如下实例调用了 printme() 函数:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/13 22:50
    # @Author  : yangyuanqiang
    # @File    : test1.py
    
    
    
    # 定义函数
    def printme(str):
        "打印任何传入的字符串"
        print(str);
        return;
    
    
    # 调用函数
    printme("我要调用用户自定义函数!");
    printme("再次调用同一函数");

    以上实例输出的结果

    我要调用用户自定义函数!
    再次调用同一函数

    参数传递

    在 python 中,类型属于对象,变量是没有类型的:

    a=[1,2,3]
    
    a="Runoob"

    以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。

    可更改(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 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

    python 传不可变对象实例

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/13 22:39
    # @Author  : yangyuanqiang
    # @File    : helloworld.py
    
    
    
    def ChangeInt( a ):
        a = 10
    
    b = 2
    ChangeInt(b)
    print( b ) # 结果是 2

    实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。

    传可变对象实例

    可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2018/4/13 22:39
    # @Author  : yangyuanqiang
    # @File    : helloworld.py
    
    
    # 可写函数说明
    def changeme(mylist):
        "修改传入的列表"
        mylist.append([1, 2, 3, 4]);
        print("函数内取值: ", mylist)
        return
    
    
    # 调用changeme函数
    mylist = [10, 20, 30];
    changeme(mylist);
    print("函数外取值: ", mylist)

    传入函数的和在末尾添加新内容的对象用的是同一个引用。以上实例输出的结果

    函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
    函数外取值:  [10, 20, 30, [1, 2, 3, 4]]
  • 相关阅读:
    阿里云提示Discuz memcache+ssrf GETSHELL漏洞如何解决
    mysql总是无故退出, InnoDB: mmap(68681728 bytes) failed; errno 12
    ElasticSearch6 报错FORBIDDEN/12/index read-only / allow delete (api)
    Yum安装时提示多库版本保护 Multilib version problems found
    redis:CLUSTER cluster is down 解决方法
    虚拟主机如何绑定网站根目录到子目录中
    iscroll遇到的两个坑
    前端之Sass/Scss实战笔记
    JS与jquery书写插件规范
    css命名推荐
  • 原文地址:https://www.cnblogs.com/ivan-yang/p/8819198.html
Copyright © 2011-2022 走看看