小数据、文件操作及函数

小数据

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

is、 == 和id

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

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

编码

英文:

  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 = b‘laonanhai‘
7 print(type(s))
8 print(type(s1))

 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)

赋值与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)

文件操作

我们用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,‘女‘)


原文地址:https://www.cnblogs.com/huihuangyan/p/9074413.html

时间: 2024-08-29 15:54:21

小数据、文件操作及函数的相关文章

python速成第二篇(小爬虫+文件操作+socket网络通信小例子+oop编程)

大家好,由于前天熬夜写完第一篇博客,然后昨天又是没休息好,昨天也就不想更新博客,就只是看了会资料就早点休息了,今天补上我这两天的所学,先记录一笔.我发现有时候我看的话会比较敷衍,而如果我写出来(无论写到笔记本中还是博客中,我都有不同的感觉)就会有不同的想法,我看书或者看资料有时候感觉就是有一种惰性,得过且过的感觉,有时候一个知识想不通道不明,想了一会儿,就会找借口给自己说这个知识不重要,不需要太纠结了,还是去看下一个吧,然后就如此往复下去,学习就会有漏洞,所以这更加坚定了我写博客来记录的想法.

python之集合、深浅copy、文件操作、函数初识

本节内容:集合.深浅copy.文件操作.函数初识 1.小知识点补充 2.编码二 3.集合 4.深浅copy 5.文件操作 6.函数的初识 1.小知识点补充                                                                                           1.1 小数据池====str.int 小数据池存在的意义就是节省内存 节省内存,位多个变量开辟一个共享空间(str和int) int:-5--256 int===

目录操作和文件操作的函数

一:目录操作的函数1.创建目录: mkdir(目录地址和名字,权限)----第三个参数bool,支持递归创建 2.删除目录:目录下没有其他文件的时候才可以 rmdir(目录地址) 3.移动目录(改名): rename(原始文件路径,新的文件路径) 4.获取目录的内容 1,打开目录,opendir,得到一个目录句柄(目录资源) 2,依次读取目录内的文件,readdir 3,关闭目录句柄(closedir)遍历目录下的所有文件!遍历只会遍历当前目录下的(一层) 5.获取当前工作路径 getcwd--

C语言文件操作(3) --- stdio.h中其他有关文件操作的函数

本篇文章会讲述一些其他有关文件操作的函数,相比前两篇文章介绍的函数,有些可能不大常用. 1. feof()函数 ·原型: int feof (FILE *stream); ·使用方法:检测"流"上的文件结束符EOF,如果检测得到,则返回一个非零值,否则返回0. ·例子(将一个文件的文本内容复制到另一个文件): #include<stdio.h> int main(void) {     FILE* input = fopen("D:\\abc.in", 

hadoop编程小技巧(6)---处理大量小数据文件CombineFileInputFormat应用

代码测试环境:Hadoop2.4 应用场景:当需要处理很多小数据文件的时候,可以应用此技巧来达到高效处理数据的目的. 原理:应用CombineFileInputFormat,可以把多个小数据文件在进行分片的时候合并.由于每个分片会产生一个Mapper,当一个Mapper处理的数据比较小的时候,其效率较低.而一般使用Hadoop处理数据时,即默认方式,会把一个输入数据文件当做一个分片,这样当输入文件较小时就会出现效率低下的情况. 实例: 参考前篇blog:hadoop编程小技巧(5)---自定义输

c语言文件操作常用函数及读写文件代码举列

文件操作常用函数 fopen() 打开流 fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串到流 fgets() 从流中读一行或指定个字符 fprintf() 按格式输出到流 fscanf() 从流中按格式读取 feof() 到达文件尾时返回真值 ferror() 发生错误时返回其值 rewind() 复位文件定位器到文件开始处 remove() 删除文件 fread() 从流中读指定个数

对文件操作系列函数详解

<span style="font-size:18px;"> #include <string.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main(int argc,char **argv) { FILE *fp; struct stat filestat; char buf[1

Windows phone 8 学习笔记(2) 数据文件操作(转)

Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式. 快速导航:一.分析各类数据文件存储方式二.安装文件夹三.本地文件夹(独立存储空间)四.媒体库操作五.本地数据库 一.分析各类数据文件存储方式 1)安装文件夹 安装文件夹即应用安装以后的磁盘根文件夹,它提供只读的访问权限.它在手机中对应的路径为" C:\Data\Programs\{XXXXXXX

文件操作的函数

1. 文件操作的函数 open(文件名(路径), mode="?", encoding="字符集") 2. 模式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b r w a r+ b 3. 常用的操作 1. 光标(seek)* seek(0) 开头 seek(0,2) 结尾 2. tell() 光标的位置 3. truncate 截断文件 4. 修改文件 1. 引入os模块 2. 打开目标文件, r 3. 打开文件副本