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]]
原文地址:https://www.cnblogs.com/ivan-yang/p/8819198.html