python学习第三天-文件的操作和函数

python的文件操作

 

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

 

    'r'       open for reading (default)

    'w'       open for writing, truncating the file first

    'x'       create a new file and open it for writing

    'a'       open for writing, appending to the end of the file if it exists

    'b'       binary mode

    't'       text mode (default)

    '+'       open a disk file for updating (reading and writing)

    'U'       universal newline mode (deprecated)

 

 

The default mode is 'rt' (open for reading text). For binary random access, the mode 'w+b' opens and truncates the file to 0 bytes, while 'r+b' opens the file without truncation. The 'x' mode implies 'w' and raises an `FileExistsError` if the file already exists.

默认模式是“rt”(打开阅读文本)。二进制随机访问的模式“w + b”打开,文件截断为0字节,而“r + b”打开文件没有截断。“x”模式意味着“w”,提出了一个“FileExistsError”如果文件已经存在。

 

r模式打开文件:

f = open('a.txt',mode='r',encoding='utf-8')

print(type(f))

data = f.read()

f.close()

print(data)

输出:

<class '_io.TextIOWrapper'>

dsdsdsds

sdsdsd

jjjjjj

222222

fdsdsd\n333434343

 

w模式打开文件

f = open('b.txt',mode='w',encoding='utf-8')

data = f.write('hehehhe\n天气真好\t晴\n')

f.close()

with open('b.txt',mode='r',encoding='utf-8') as f:

    print(f.read())

 

输出:

hehehhe

天气真好   晴

 

x模式打开文件(当文件存在时)

f = open('b.txt',mode='x',encoding='utf-8')

data = f.write('hehehhe\n天气真好\t晴')

f.close()

print(data)

输出:

Traceback (most recent call last):

  File "E:/PycharmProjects/s17/day03/test.py", line 16, in <module>

    f = open('b.txt',mode='x',encoding='utf-8')

FileExistsError: [Errno 17] File exists: 'b.txt'

 

x模式打开文件(文件不存在)

f = open('c.txt',mode='x',encoding='utf-8')

data = f.write('hehehhe\n天气真好\t晴')

f.close()

f = open('c.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

print(data)

输出:

hehehhe

天气真好   晴

 

a模块打开文件

f = open('b.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

print(data)

f = open('b.txt',mode='a',encoding='utf-8')

data = f.write('etstetd')

f.close()

print(data)

f = open('b.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

print(data)

输出:

hehehhe

天气真好

7

hehehhe

天气真好etstetd

 

以b模式打开

f = open('b.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

print(data)

f = open('b.txt',mode='r+b')

data = f.read()

f.close()

print(data)

输出:

哈罗

b'\xe5\x93\x88\xe7\xbd\x97'

 

以r+模式打开

f = open('b.txt',mode='r+',encoding='utf-8')

data = f.read()

print(data)

f.seek(0)

data = f.write('测试')

f.close()

f = open('b.txt',mode='r',encoding='utf-8')

data = f.read()

f.close()

print(data)

输出:

哈罗

测试

 

文件的替换操作:

f1 = open('a.txt',mode='r',encoding='utf-8')

f2 = open('a.swap',mode='w',encoding='utf-8')

data = f1.readlines()

print(data)

i = 0

while i< len(data):

    if data[i].startswith('1111'):

        data[i] = '222222\n'

    i += 1

print(data)

f2.writelines(data)

f1.close()

f2.close()

import os

os.remove('a.txt')

os.rename('a.swap','a.txt')

输出:

['dsdsdsds\n', 'sdsdsd\n', 'jjjjjj\n', '111111111\n', 'fdsdsd\\n333434343']

['dsdsdsds\n', 'sdsdsd\n', 'jjjjjj\n', '222222\n', 'fdsdsd\\n333434343']

 

#思路二

import os

read_f=open('b.txt','r')

write_f=open('.b.txt.swap','w')

for line in read_f.readlines():

    if line.startswith('1111'):

        line='2222222222\n'

    write_f.write(line)

read_f.close()

write_f.close()

os.remove('b.txt')

os.rename('.b.txt.swap','b.txt')

 

 

 

Python 函数

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

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

 

 

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

 

函数的结构

def functionname( parameters ):

   "函数_文档字符串"

   function_suite

   return [expression]

 

#定义函数的三种形式

一:无参数函数:如果函数的功能仅仅只是执行一些操作而已,就定义成无参函数,无参函数通常都有返回值

def print_star():

    print('#'*6)

 

二:定义有参函数:函数的功能的执行依赖于外部传入的参数,有参函数通常都有返回值

 def my_max(x,y):

     res=x if x >y else y     return res

 

 

#三元表达式

x=10

y=2

if x > y:

    print(x)

else:

    print(y)

res=x if x > y else y print(res)

 

函数调用

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

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

如下实例

def print_star(num):

    i = j = k = 1

    for i in range(0, num):

        for k in range(0, num - i):

            print("*",end='')

            k += 1

        i += 1

        print('')

print_star(3)

输出:

***

**

*

 

 

def foo():

    print('from foo')

 

def bar(name):

    print('bar===>',name)

 

#按照有参和无参可以将函数调用分两种

foo() #定义时无参,调用时也无需传入参数

bar('egon') #定义时有参,调用时也必须有参数

 

 

#按照函数的调用形式和出现的位置,分三种

foo() #调用函数的语句形式

def my_max(x,y):

    res=x if x >y else y

    return res

res=my_max(1,2)*10000000 #调用函数的表达式形式

print(res)

 

def my_max(x,y):

    res=x if x >y else y

    return res

res=my_max(my_max(10,20),30) #把函数调用当中另外一个函数的参数

print(res)

 

返回值

def foo():

    print('from foo')

    return None

res=foo()

print(res)

以三种情况返回值都为None:

没有return

return 什么都不写

return None

 

def foo():

    print('from foo')

    x=1

    return 1,[2,3],(4,5),{}

print(foo())

输出:

from foo

(1, [2, 3], (4, 5), {})

 

参数

以下是调用函数时可使用的正式参数类型:

必备参数

关键字参数

默认参数

不定长参数

 

必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

调用printme()函数,你必须传入一个参数,不然会出现语法错误:

 

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

以下实例在函数 printme() 调用时使用参数名:

 

缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:

 

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

 

匿名函数

python 使用 lambda 来创建匿名函数。

lambda只是一个表达式,函数体比def简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

 

例子:

def foo(x,y,z):

    print('from foo',x,y,z)

 

def wrapper(*args,**kwargs):

    print(args)

    print(kwargs)

wrapper(1,2,3,a=1,b=2)

输出:

(1, 2, 3)

{'a': 1, 'b': 2}

 

def foo(x,y,z):

    print('from foo',x,y,z)

def wrapper(*args,**kwargs):

    print(args) #args=(1,2,3)

    print(kwargs) #kwargs={'a':1,'b':2}

    foo(*args,**kwargs) #foo(*(1,2,3),**{'a':1,'b':2}) #foo(1,2,3,b=2,a=1)

wrapper(1,z=2,y=3)

 

def foo(x,y,z):

    print('from foo',x,y,z)

def wrapper(*args,**kwargs):

    # print(args) #args=(1,)

    # print(kwargs) #kwargs={'y':3,'z':2}

    foo(*args,**kwargs) #foo(*(1,),**{'y':3,'z':2}) #foo(1,z=2,y=3)

# wrapper(1,2,3,a=1,b=2)

wrapper(1,z=2,y=3)

posted @ 2017-05-19 23:50  勇往直前1314  阅读(98)  评论(0)    收藏  举报