小数据文件操作及函数

Posted 辉煌-love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小数据文件操作及函数相关的知识,希望对你有一定的参考价值。

小数据

小数据池:为了节省内存空间。

is、 == 和id

== :数值的比较
is :内存地址的比较
id 查看内存地址

int -5~256
str 有特殊字符不存在小数据池。
单个字符*int(20) 以内 有小数据池。

技术分享图片View Code

 编码 

英文:

  str: 表现形式: s = ‘alex‘
  内部编码方式:unicode

  bytes:表现形式: s = b‘alex‘

  内部编码方式:非unicode(utf-8,gbk...)
中文:
  str: 表现形式: s = ‘中国‘
  内部编码方式:unicode

  bytes:表现形式: s = b‘\xe2\xe2\xe2\xe2\xe2\xe2\‘
  内部编码方式:非unicode(utf-8,gbk...)

str---> bytes s.encode(‘gbk‘) s.encode(‘utf-8‘) 编码
bytes ---> str s.decode(‘gbk‘) s.decode(‘utf-8‘) 解码

技术分享图片
1 s = fdsagsadfsad方式打开家乐福;按时fdsafdsa
2 #ip地址 端口等等
3 s1 = input(你好)
4 s1
5 s = laonanhai
6 s1 = blaonanhai
7 print(type(s))
8 print(type(s1))
View Code
技术分享图片
 1 s = alex  # str
 2 s1 = s.encode(utf-8)  # bytes
 3 # encode 编码 :str --- > bytes
 4 s = hello girl
 5 s1 = s.encode(utf-8)
 6 print(s1)
 7 
 8 s = hello girl
 9 s1 = s.encode(gbk)
10 print(s1)
11 s = 中国
12 s1 = s.encode(utf-8)
13 print(s1)
14 
15 s = 中国
16 s1 = s.encode(gbk)
17 print(s1)
View Code

赋值与copy

对于赋值运算,指向的是同一个内存地址。字典,列表,集合都一样。

l1 = [1,2,3]
l2 = l1
l2.append(111)
# print(l1,l2)
print(id(l1))
print(id(l2))
s = 1000
s1 = s
print(id(s))
print(id(s1))

 

copy 不是指向一个,在内存中开辟了一个内存空间对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

 l1 = [1,2,3]
 l2 = l1.copy()
 l1.append(111)
 print(id(l1),id(l2))
 l1 = [1,2,[1,2,3,[22,33,44]],4]
 l2 = l1.copy()
 l1[2].append(666)
 print(l1)
 print(l2)
 print(id(l1))
 print(id(l2))

 

对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变.

技术分享图片
 1 import copy
 2 l1 = [1, 2, [1, 2, 3], 4]
 3 l2 = copy.deepcopy(l1)
 4 l1[2].append(666)
 5 print(l1,l2)
 6 l2 = copy.deepcopy(l1)
 7 l1[2].append(666)
 8 print(l1)
 9 print(id(l1[2]),id(l2[2]))
10 l1 = [1,2,3]
11 l2 = l1
12 l2.append(111)
13 print(l1,l2)
14 
15 l1 = [1,2,3,[22,33]]
16 l2 = copy.deepcopy(l1)
17 print(l2)
18 l2 = l1[:]
19 l1[3].append(666)
20 print(l2)  # [1, 2, 3, [22, 33, 666]]
21 
22 l1 = [1,2,3,]
23 l2 = l1[:]
24 l1.append(666)
25 print(l2)
View Code

 文件操作

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。

有了文件的概念,我们无需再去考虑操作硬盘的细节,只需要关注操作文件的流程:

1,打开文件,产生一个文件句柄。
2,对文件句柄进行
3,关闭文件。

f = open(D:\护士老师主妇空姐联系方式.txt,encoding=utf-8,mode=r)
content = f.read()
print(content)

 

f:变量,f_obj,file,f_handler,...文件句柄。open windows的系统功能,windows默认编码方式:gbk,linux默认编码方式utf-8。f.close()

流程:打开一个文件,产生一个文件句柄,对文件句柄进行操作,关闭文件。

1、全部读出来

f = open(D:\护士老师主妇空姐联系方式.txt,encoding=gb2312)
1:全部读出来f.read()
f = open(log,encoding=utf-8)
content = f.read()
print(content,type(content))
f.close()

2、一行一行的读

f = open(log,encoding=utf-8)
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()

 3、将原文件的每一行作为一哥列表的元素。

f = open(log,encoding=utf-8)
print(f.readlines())
f.close()

 4、读取一部分read(n),在r模式下,read(n)按照字符去读取。,在rb模式下,read(n)按照字节去读取。

f = open(log,encoding=utf-8)
print(f.read(3))
f.close()
f = open(log,mode=rb)
content = f.read(4)
print(content)
f.close()

 5、循环读取

f = open(log,encoding=utf-8)
for i in f:
    print(i.strip())
f.close()

6、非文字类的文件时,用rb

f = open(D:\护士老师主妇空姐联系方式.txt,mode=rb)
content = f.read()
print(content)
f.close()

1、没有文件,创建一个文件写入内容

f = open(log1,encoding=utf-8,mode=w)
f.write(儿科王金发;剪短发了肯定撒就废了;就)
f.close()

2、有文件,将原文件内容清空,在写入内容。

f = open(log1,encoding=utf-8,mode=w)
f.write(666)
f.close()

3、wb

f = open(log,mode=wb)
f.write(老男孩教育.encode(utf-8))
f.close()

4、没有文件,创建一个文件追加内容

f = open(log2,encoding=utf-8,mode=a)
# f.write(‘666‘)
# f.close()

5、有文件,直接追加内容。

f = open(log2,encoding=utf-8,mode=a)
f.write(666)
f.close()

7、r+ 先读,后追加 一定要先读后写

f = open(log,encoding=utf-8,mode=r+)
content = f.read()
print(content)
f.write(aaa)
f.close()

8、错误的

f = open(log,encoding=utf-8,mode=r+)
f.write(BBB)
content = f.read()
print(content)
f.close()

9、w+ 先写后读

f = open(log,encoding=utf-8,mode=w+)
f.write(中国)
#print(f.tell())  # 按字节去读光标位置
f.seek(3)  # 按照字节调整光标位置
print(f.read())
f.close()

10、a+ 追加读

f = open(log,encoding=utf-8,mode=a+)
f.write(BBB)
content = f.read()
print(content)
f.close()

11、其他方法

f = open(log,encoding=utf-8)
print(f.read())
print(f.writable())
f.close()

  f = open(‘log‘,encoding=‘utf-8‘,mode=‘a‘)
  f.truncate(7) # 按字节对原文件截取
  f.close()

12、功能一:自动关闭文件句柄,功能二:一次性操作多个文件句柄。

with open(log,encoding=utf-8) as f:
    print(f.read())
with open(log1,encoding=utf-8) as f1:
    print(f1.read())

with open(log,encoding=utf-8) as f1,    open(log1,encoding=utf-8) as f2:
    print(f1.read())
    print(f2.read())

1,将原文件读取到内存。
2,在内存中进行修改,形成新的内容。
3,将新的字符串写入新文件。
4,将原文件删除。
5,将新文件重命名成原文件。

import os
with open(log,encoding=utf-8) as f1,    open(log.bak,encoding=utf-8,mode=w) as f2:
    content = f1.read()
    new_content = content.replace(alex,SB)
    f2.write(new_content)
os.remove(log)
os.rename(log.bak,log)

import os
with open(log,encoding=utf-8) as f1,    open(log.bak,encoding=utf-8,mode=w) as f2:
    for i in f1:
        new_i = i.replace(SB,alex)
        f2.write(new_i)
os.remove(log)
os.rename(log.bak,log)

函数的初识

重复代码多,可读性差,所以函数产生了:函数就是封装一个功能。
例如:def my_len(): ;def 关键字 定义一个函数;my_len 函数名书写规则与变量一样。; def 与函数名中间一个空格。;函数名():加上冒号函数体

def my_len():
     count = 0
     for j in l1:
         count += 1
     print(count)
my_len()

函数的返回值,写函数,不要再函数中写print()

while True:
    print(222)
    print(666)
print(len([1,23,4]))

1,在函数中,遇到return结束函数。
2,将值返回给函数的调用者。

无 return
return None
return 1个值 该值是什么,就直接返回给函数的调用者,函数名()
return 多个值 将多个值放到一个元组里,返回给函数的调用者。

def fun():
    print(111)
    print(222)
    print(333)
    return 2,3,4
a,b,c = fun()
print(a,b,c)
def my_len():
    count = 0
    for j in l1:
        count += 1
      return count
      return 777
      return [1,2,3]
    return 1,2,3,[22,33],alexsb
  ret = my_len()
  print(ret)
print(my_len())

print(len(3243243))
函数的传参
def my_len(l):  # l 形式参数 形参
    print(l)
    count = 0
    for j in l:
        count += 1
    return count
a = fdsafdsafdsagfsadf
print(my_len(a))  # 实际参数 ,实参
print(my_len([1,2,3]))

实参角度:1,位置传参。按顺序,一一对应

def my_len(l):  # l 形式参数 形参
    print(l)
    count = 0
    for j in l:
        count += 1
    return count
a = fdsafdsafdsagfsadf
print(my_len(a))  # 实际参数 ,实参
print(my_len([1,2,3]))

def func(a,b,c):
    print(a)
    print(b)
    print(c)
func(fdsafdas,3,4)

写一个函数,功能比大小,

def max_min(a,b):
    if a > b:
        return a
    else:
        return b
num1 = int(input(请输入一个数:))
num2 = int(input(请输入另一个数:))
print(max_min(num1,num2))

ps: 三元运算

def max_min(a,b):
    if a > b:
        return a
    else:
        return b
print(max_min(100,200))
def max_min(a,b):
    return a if a > b else b
print(max_min(300,200))

关键字传参,不按顺序,一一对应

def max_min(a,b):
    return a if a > b else b
print(max_min(b = 300,a = 200))

混合传参,关键字参数永远在最后面

def func1(a,b,c,d,e):
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)
func1(1,2,d=4,c=3,e=5)
func1(1,4,d=2,c=3,e=5)

按照形参角度

1,位置传参。按顺序,一一对应。
def func(a,b,c):
    print(a)
    print(b)
    print(c)
func(fdsafdas,3,4)

2,默认参数。

def func(a,b=666):  #
    print(a,b)
  func(1,2)
  func(1,777)
func(1,2)
 s = alex.center(30,*)
 print(s)
 def Infor_entry(username,sex=):
     with open(name_list,encoding=utf-8,mode=a) as f1:
         f1.write({}\t{}\n.format(username,sex))
while True:
    username = input(请输入姓名(男生以1开头)).strip()
    if 1 in username:
        username = username[1:]
        Infor_entry(username)
    else:
        Infor_entry(username,)

 




 






























以上是关于小数据文件操作及函数的主要内容,如果未能解决你的问题,请参考以下文章

android小知识点代码片段

逆向及Bof基础实践

常用 JavaScript 小技巧及原理详解

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

20155307刘浩《网络对抗》逆向及Bof基础

会员管理小程序实战开发08-低码中操作数据库