文件操作与函数

时间:2021-10-02 13:05:52

一、文件操作

1)、file 对象使用 open 函数来创建

参数1:文件名,可以是文件的绝对路径

参数2:option ,常用的有:r(读),w(写),a(追加),b(以二进制方式进行操作)

2)、 file 对象常用的函数

①、file.read()          把文件的所有内容读取出来,返回一个字符串

②、file.write(data)        把字符串data写入到文件中,只接受字符串参数

③、file.readline()          每次读取文件一行数据,返回每行的字符串数据

④、file.readlines()        读取文件内容,返回一个list,每一行是一个元素

⑤、file.name           文件名字

⑥、file.fileno()           文件描述符

⑦、file.close()           关闭文件

⑧、file.encoding          文件编码(这个最好每次写上,可以避免版本问题导致的乱码)

⑨、file.closed            返回布尔值,判断文件是否已经关闭

⑩、file.seek(offset, whence)     控制文件光标,文件需要使用b方式打开,offset偏移量正数向后偏移,负数向前偏移,whence(0表示开头,1表示当前位置,2表示结尾)

⑪、file.tell()           返回光标的下标(换行符\n等于两个字符)

⑫、file.truncate(size)         只有在写文件才能用,size表示清空到什么地方

3)、示例

①、读取文件内容(读状态下需要文件是存在的,否则报错):

f = open("1.txt", "r", encoding="utf-8")
print(f.read())
f.close()

②、写入文件内容(写状态下文件是否存在不重要,存在的话会重写,不存在会创建):

f = open("1.txt", "w", encoding="utf-8")
f.write("nihao\nwoshi\njiang")
f.close()

③、追加文件内容:

f = open("1.txt", "a", encoding="utf-8")
f.write("nihao\nI'm jiang\nWhat's your name")
f.close()

④、全局声明(默认规定用大写,后面如果有多处修改的话可以很快速的解决,建议使用):

ENCODING = "utf-8"
f = open("1.txt", "a", encoding=ENCODING)
f.write("nihao\nI'm jiang\nWhat's your name")
f.close()

⑤、打印文件内容及行号(需要使用到enumerate):

ENCODING="utf-8"
f = open("1.txt", "r", encoding=ENCODING)
for i, line in enumerate(f.readlines()):
print(i+1, line)
f.close()

⑥、引用with语句来自动调用close()方法(最常用方式),使用codecs模块可以避免编码问题,推荐尽量使用这种: 

with codecs.open('/path/to/file', 'r', encoding="utf-8") as f:
print(f.read())

 

二、函数

1)、函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。也可以自己创建函数,这被叫做用户自定义函数。在写每一个函数的时候尽量不要超过30行代码,精简成每个细小功能,提高易读性!

2)、语法:

函数的声明(形参):
def functionname( parameters ): "函数_文档字符串" function_suite return [expression]

函数的调用(实参):
functionname( arg1, arg2, ... )

 3)、示例:

①、阶乘:

def jc(n):
result = 1
if n == 0:
return result
else:
for i in range(1, n + 1):
result *= i
return result

def main():
count = 0
num = input("Pls input the num: ")
for i in range(0, int(num)+1):
count += jc(i)
print("count={0}".format(count))

if __name__ == '__main__':
main()

 4)、不定长参数

def fun(a, *args, **kwargs):
pass

*args   代表list

**kwargs   代表dict

当传入的参数如下:
fun(1, 2, 3, 4, 5 ,a=1, b=2)

得到的结果是:
a = 1

args = 2, 3, 4, 5     tuple参数 对应赋值
kwars ={"a": 1, "b": 2} dict参数 对应赋值

 5)、匿名函数

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

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

5.2、语法:

lambda [arg1 [,arg2,.....argn]]:expression

5.3示例:

函数①和函数②是相等的:
函数①:
def add(x, y):

return x+y

函数②:
lambda x, y: x+y