标签:文件夹 内存 提升 内存地址 可扩展性 共享 ++ 一个 python
# f.seek移动的全都是字节个数
# f.seek(字节个数,0) # 文件最开始的地方
# f.seek(字节个数,1) # 指针移动到的地方
# f.seek(字节个数,2) # 文件末尾
# ps:只有0模式可以t下使用,其中1和2模式只能在b模式下使用,但是无论在t模式还是b模式下,移动的都是字节个数
# 例如:a.txt 内容:hello你好kasjdkla
with open(r"a.txt",mode="rt",encoding="utf-8") as f:
print(f.tell()) # 0 查看当前文件指针距离文件开头的位置,输出结果为0
f.seek(9,0) # 9 查看当前文件指针距离文件开头的位置,输出结果为9
f.seek(3,0) # 3 查看当前文件指针距离文件开头的位置,输出结果为3
print(f.tell()) # 3 查看当前文件指针距离文件开头的位置,最终输出结果为3
with open(‘a.txt‘,mode=‘rb‘) as f:
print(f.tell()) #0 从指针当前位置往后移动0个字节,而此时的当前位置就是文件开头
f.seek(9,1) # 9 从当前位置往后移动9个字节,而此时的当前位置就是文件开头
f.seek(3,1) # 12 从当前位置往后移动3个字节,而此时的当前位置9
print(f.tell()) # 12 从当前位置往后移动3个字节,而此时的当前位置9
with open(‘a.txt‘,mode=‘rb‘) as f:
print(f.tell()) #0 从指针当前位置往后移动0个字节,而此时的当前位置就是文件开头
f.seek(0,2) # 参照文件末尾移动19个字节, 即直接跳到文件末尾
print(f.tell()) # 19 输出结果为:19
with open(‘a.txt‘,mode=‘ab‘) as f:
print(f.tell()) # 19 追加模式指针移动到最后,显示全部字节
# Linux命令:tail -f access.log
# 例如:a.txt 内容:hello你好kasjdkla
# with open(‘a.txt‘, mode=‘r+t‘, encoding=‘utf-8‘) as f:
# f.seek(9,0)
# f.write("hello") #hello你?hellojdkla
# PS:文件修改不是修改,而是执行覆盖命令
# 文件修改的原理:
# 把硬盘数据读入内存,在内存修改完毕后,再覆盖回硬盘
# 具体来说又分为两种方案
# 方案一: 利:不占硬盘空间 弊:占据内存空间
with open(‘test.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
data = f.read()
with open(‘test.txt‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
f.write(data.replace(‘egon‘,‘EGON‘))
# 方案二: 利:不占内存空间 弊:占据硬盘空间(2倍)
import os
with open(‘test.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f1, open(‘.test.txt.swp‘,mode=‘wt‘,encoding=‘utf-8‘) as f2:
for line in f1:
f2.write(line.replace(‘EGON‘,"egon"))
os.remove(‘test.txt‘)
os.rename(‘.test.txt.swp‘,‘test.txt‘)
"""
1 什么是函数
函数就是盛放功能(一系列代码)的容器
定义函数就是造出了一个工具
事先准备工具的过程->函数的定义
遇到应用场景拿来就用->函数的调用
2 为何要用函数
不用函数写出的代码问题是:
1 程序的组织结构不清晰,可读性差,可维护性差
2 可扩展性差
3 如何用函数
原则:
先定义
后调用
定义函数的语法:
def 函数名(参数1,参数2,参数3,...):
代码1
代码2
代码3
return 值
调用函数语法:
res = 函数名(值1,值2,值3)
"""
# ①定义函数 & 调用函数
# 1 定义函数与调用函数
# x = 10
# y = x
# print(x)
# def func(): # func = 函数的内存地址
# print("*" * 40)
# print("hello".center(40, ‘ ‘))
# print(‘=‘ * 40)
#
# print(func)
# f = func
# f()
# func()
# 2 函数定义阶段发生的事情:
# 申请内存空间,把函数体代码放进去,然后把内存地址绑定给函数名
# def func():
# print(1)
# print(2
# print(3)
# 3 函数调用阶段发生的事情: 执行函数体代码
# def func():
# print(1)
# print(2)
# asdf
# print(3)
#
# func()
# ps: 函数定义阶段只检测语法不执行代码,只有在调用函数时才会执行函数体代码
# ②函数的参数:形参与实参
# 函数的参数分为形式参数和实际参数,简称形参和实参:
# 形参即在定义函数时,括号内声明的参数。形参本质就是一个变量名,用来接收外部传来的值。
# 实参即在调用函数时,括号内传入的值,值可以是常量、变量、表达式或三者的组合:
# # 例1:
# def bar():
# print(‘from bar‘)
#
# def foo():
# print(‘from foo‘)
# bar()
#
# foo() # from foo\n from bar
# 例2:
# def foo():
# print(‘from foo‘)
# bar()
#
# def bar():
# print(‘from bar‘)
#
# foo() # from foo\n from bar
# def add(x,y):
# res = x + y
# print(res)
# add(1,2)
# def func(x, y):
# if x > y:
# print(x)
# else:
# print(y)
# func(11231231231, 22123123123213)
# def login(inp_user,inp_pwd):
# if inp_user == ‘egon‘ and inp_pwd == "123":
# print(‘ok‘)
# else:
# print(‘error‘)
# login(‘egon‘,"123")
# l = [111, 222, 333, 444, 555]
#
# size = len(l)
# if size > 3:
# print(‘ok‘)
# else:
# print(‘no‘)
# def max2(sal1, sal2):
# if sal1 > sal2:
# return sal1
# else:
# return sal2
#
# res = max2(1000,2000)
# print(res * 12)
# l = [111, 22, 333]
# res = l.append(4444)
# res = l.pop()
# print(res)
# ③ 函数的返回值
# return返回值的语法: return也可以作为中断循环工具的语法。
# 函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值当作本次调用的产品返回
# def func():
# print(‘aaaa‘)
# return 11111111111111
# print(‘bbbb‘)
# return 2222222222
# print(‘cccc‘)
# return 333333333
#
# res = func()
# print(res)
# 具体来说函数的返回值有三种形式
# 1 return 值: 返回的就是改值本身/-
# 2 return 值1,值2,值3:返回的是小元组
# def func():
# return 1111,"aaa",[11,222]
#
# x,y,z = func()
# print(x,y,z)
# # 3 没有return或者return无值或者return None:返回的都是None
# def func():
# res = 1 + 2
# return
#
# res = func()
# print(res)
"""
1 什么是模块
模块一系列功能的集合体
模块分为四种通用的类别
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展 # 不用
3 把一系列模块组织到一起的文件夹
(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块 #不用
模块有三种来源:
1 python自带的模块/库
内置模块
标准库
2 第三方的库
3 自定义库
2 为何要用模块
1 拿来主义,提升开发效率
2 减少代码冗余
3 如何用模块
import
from ... import
"""
# import spam
# print(spam.x)
# print(spam.f1)
# print(spam.f2)
# def f1():
# print(‘xxxxxxxx‘)
# spam.f1()
# spam.f2()
# from spam import x,f1,f2
# def f1():
# print(‘xxxxx‘)
# f1()
# 一 time模块
import time
# 时间戳
# print(time.time())
# 格式化的字符
# print(time.strftime(‘%Y-%m-%d %H:%M:%S‘))
# 结构化的时间
# obj = time.localtime()
# print(obj.tm_year)
# print(obj.tm_yday)
# print(obj)
# obj2 = time.gmtime() # utc
# print(obj2)
# 二 random模块
import random
# print(random.random())
# print(random.randint(1,3))
# print(random.randrange(1,3))
# print(random.choice([11,"aaa",333]))
# print(random.sample([11,"aaa",333,444],2))
# print(random.uniform(1, 3))
# item=[1,3,5,7,9]
# random.shuffle(item)
# print(item)
# 储备知识
# print(chr(65))
# print(chr(90))
#
# print(ord(‘A‘))
# print(ord(‘Z‘))
# 随机验证码游戏:
import random
def make_code(size):
res = ‘‘
for i in range(size):
num = str(random.randint(0,9))
s = chr(random.randint(65,90))
res += random.choice([num,s])
return res
print(make_code(6))
标签:文件夹 内存 提升 内存地址 可扩展性 共享 ++ 一个 python
原文地址:https://www.cnblogs.com/ws7788/p/14868878.html