day-03操作文件,函数,模块

 

python官方手册:https://docs.python.org/zh-cn/3/library/index.html

文件

无论是什么类型的文件,最终都是以二进制01的方式存储

文件的操作步骤:打开、读写、关闭

操作文本文件

字符编码

不同国家有不同的编码方案。如美国的ASCII码,西欧的ISO-8859-1也叫lartin1,中国的GBK/GB18030/GB2312

为了实现字符编码的统一,国际标准化组织ISO发布了万国码Unicode。其中utf8是Unicode的一种方案。

字符是str,字节是bytes。一个英文字符是字符,一个汉字字符也是一个字符;但是在utf8中,一个英文字符占1

个字节,一个汉字字符通常需要占3个字节

在python中,bytes类型数据表示时,如果一个字节正好可以表示成一个字符,就以字符的方式显示;如果一个字

节不能表示成字符,就以16进制方式显示

读取文本文件

>>> s1 = ‘a’

>>> s2 = ‘中’

>>> type(s1)

<class ‘str’>

>>> type(s2)

<class ‘str’>

>>> s1.encode() # 将s1转成bytes类型

b’a’ # 前面的b表示bytes类型

>>> s2.encode()

b’\xe4\xb8\xad’ # \x表示后面的e4为16进制

>>> b1 = s2.encode()

>>> b1

b’\xe4\xb8\xad’

>>> b1.decode() # 将bytes类型转为str类型

‘中’写入文本文件

[root@localhost day03]# cp /etc/passwd /tmp/

# 默认以’r’的方式打开文件,文件不存在则报错。

>>> f = open(‘/tmp/mima’) # 报错

>>> f = open(‘/tmp/passwd’) # 打开文件,得到一个文件对象

>>> data = f.read() # 默认读取全部数据

>>> print(data)

>>> data = f.read() # 继续向后读取

>>> data

>>> f.close() # 关闭文件

>>> f = open(‘/tmp/passwd’, ‘r’)

>>> f.readline() # 读一行

‘root:x:0:0:root:/root:/bin/bash\n’

>>> f.readline() # 继续读一行

‘bin:x:1:1:bin:/bin:/sbin/nologin\n’

>>> f.readlines() # 继续读后续内容,每一行都放到列表中

>>> f.close()

################重要###############

>>> f = open(‘/tmp/passwd’)

>>> for line in f:

… print(line, end=”)

>>> f.close()

# 以’w’方式写入文件时,文件不存在则创建;文件存在则清空

>>> f = open(‘/tmp/passwd’, ‘w’)

[root@localhost day03]# cat /tmp/passwd # 空的

>>> f.write(‘Hello World!\n’)

13 # 13表示写入了13字节

# 数据先会写入到缓存,等缓存中的数据达到一定量时才会同步至硬盘,关闭文件时,也会写入硬盘。

[root@localhost day03]# cat /tmp/passwd # 空的

>>> f.flush() # 立即同步数据到硬盘

[root@localhost day03]# cat /tmp/passwd

Hello World!

>>> f.writelines([‘How are you?\n’, ‘吃了吗?\n’])

>>> f.close()

[root@localhost day03]# cat /tmp/passwd

Hello World!

How are you?

吃了吗?

# 以a的方式打开文件,可以将数据追加到结尾

>>> f = open(‘/tmp/passwd’, ‘a’)

>>> f.write(‘my test\n’)

8

>>> f.close()

[root@localhost day03]# cat /tmp/passwd

Hello World!

How are you?

吃了吗?

my test操作非文本文件

无论是什么文件都以二进制方式存储

操作非文本文件的方法,也适用于文本文件

with语句

使用with打开文件,with语句结束,文件自动关闭

seek语句(了解)

用于移动文件指针

seek函数的第二个参数,0表示开头,1表示指针当前位置,2表示结尾;第一个参数是相对于第二个参数的偏移

[root@localhost ~]# wget http://pic1.win4000.com/wallpaper/4/579861684f4e7.jpg -O

girl.jpg

>>> f = open(‘/root/girl.jpg’, ‘rb’) # b表示bytes

>>> f.read(100) # 读取100字节

b’\xff\xd8\xff\xe1\x17%Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x0c\x01\x00\x00\x03\x00\x

00\x00\x01\x057\x00\x00\x01\x01\x00\x03\x00\x00\x00\x01\x07\xd0\x00\x00\x01\x02\x00\x03\

x00\x00\x00\x03\x00\x00\x00\x9e\x01\x06\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x01\x12\

x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x01\x15\x00\x03\x00\x00\x00\x01\x00\x03\x00\x00\

x01\x1a\x00\x05\x00\x00′

>>> f.close()

>>> f = open(‘/root/girl.jpg’, ‘rb’)

>>> data = f.read(1000)

>>> f.close()

>>> f = open(‘/tmp/myimg.jpg’, ‘wb’)

>>> f.write(data)

1000

>>> f.close()

>>> with open(‘/tmp/passwd’) as f:

… f.readline()

‘Hello World!\n’

>>> f.readline() # 报错,因为文件已经关闭函数

函数就是一组代码。方便实现代码重用

函数声明语法结构

函数声明时,它里面的代码块不执行

调用函数时,函数体的代码块执行

返回值

函数的执行结果通过关键字return返回

没有return语句,默认返回None

>>> f = open(‘/tmp/passwd’, ‘rb’)

>>> f.seek(5, 0) # 从开头向右移动 5字节

5

>>> f.read(3)

b’ Wo’

>>> f.seek(3, 1) # 从当前位置向右移动 3字节

11

>>> f.read(1)

b’!’

>>> f.seek(0, 2) # 移动指针到结尾

47

>>> f.read()

b”

>>> f.close()

def 函数名():

代码块参数

可以简单的把参数理解为变量

在函数内部需要使用一些数据,这些数据不是固定的,不能提前预知,就使用参数的方式传递

在定义函数时,写在函数后面()中的名字,只是形式上占个位置,所以称作形式参数、形参

在调用函数时,将具体的数据传给函数,这个时候是实际使用的参数,所以称作实际参数、实参

相当于定义函数时的参数是变量名,调用函数时传递的是变量值

默认参数

声明函数时,为参数指定默认值

>>> def add():

… a = 10 + 5

>>> x = add()

>>> print(x)

None

>>> print(a) # 报错,没有a这个变量

>>> def add():

… a = 10 + 5

… b = a + 6

… return ‘Hello World’

>>> x = add()

>>> print(x)

Hello World

>>> def add():

… a = 10 + 5

… return a

>>> x = add()

>>> print(x)

15

>>> x + 8

23

>>> def add():

… a = 10 + 5

… print(a)

>>> x = add()

15

>>> x + 8位置参数

相当于shell里的位置参数($1 / $2等)

在python中,位置参数保存在sys模块的argv列表中

sys.argv[0]是列表的第一项,sys.argv[1]是列表的第二项… …

模块

文件是python在物理上组织代码的形式

模块是python在逻辑上组织代码的形式

一个以.py结尾的python文件就是一个模块。模块名是文件名去除.py后的部分

模块命名约定与变量一致

>>> def pstar():

… print(‘*’ * 30)

>>> pstar()

******************************

>>> pstar(50) # 报错,因为函数定义时,没有参数

>>> def pstar(n):

… print(‘*’ * n)

>>> pstar(30)

******************************

>>> pstar(50)

**************************************************

>>> pstar() # 报错,因为函数需要参数,但是没有给定

>>> def pstar(n=30): # 默认参数

… print(‘*’ * n)

>>> pstar(20)

********************

>>> pstar()

******************************

[root@localhost day03]# cat position.py

import sys

print(sys.argv)

[root@localhost day03]# python3 position.py

[‘position.py’]

[root@localhost day03]# python3 position.py hao 123

[‘position.py’, ‘hao’, ‘123’]导入模块的方法

导入模块叫作import。导入模块时,模块中的代码将会执行一遍,这个过程叫load加载。不管import多少次,只加

载一次。

模块的特殊属性

每个模块都有一个名为__name__的特殊属性

__name__是一个变量。它的值有两个:

如果模块是直接运行的,它的值是__main__

如果模块是被导入的,它的值是模块名

[root@localhost day03]# cat star.py

hi = ‘Hello World’

def pstar(n=30):

print(‘*’ * n)

[root@localhost day03]# cat mytest.py

import star

print(star.hi)

star.pstar()

[root@localhost day03]# python3 mytest.py

Hello World

******************************

# 常用的方法

>>> import time

>>> time.ctime()

‘Tue May 19 16:35:33 2020’

>>> from random import randint, choice

>>> randint(1, 100)

99

>>> choice(‘abcdefg’)

‘f’

# 不常用的方法

>>> import os, datetime # 同时导入多个模块

>>> import getpass as gp # 导入模块时,起别名[root@localhost day03]# cat mymod.py

print(__name__)

[root@localhost day03]# cat aaaa.py

import mymod

[root@localhost day03]# python3 mymod.py

__main__

[root@localhost day03]# python3 aaaa.py

mymod

可以根据__name__的值,判断模块是直接运行,还是被导入。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇