python基础(集合文件操作)

Posted python052044

tags:

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

集合:

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

1,集合的创建。

set1 = set({1,2,barry})
set2 = {1,2,barry}
print(set1,set2)  # {1, 2, ‘barry‘} {1, 2, ‘barry‘}

2,集合的增。

set1 = {alex,wusir,ritian,egon,barry}
set1.add(景女神)
print(set1)

#update:迭代着增加
set1.update(A)
print(set1)
set1.update(老师)
print(set1)
set1.update([1,2,3])
print(set1)
复制代码

3,集合的删。

set1 = {alex,wusir,ritian,egon,barry}

set1.remove(alex)  # 删除一个元素
print(set1)

set1.pop()  # 随机删除一个元素
print(set1)

set1.clear()  # 清空集合
print(set1)

del set1  # 删除集合
print(set1)

4,集合的其他操作:

  4.1 交集。(&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}

  4.2 并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}

print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}

  4.3 差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

  4.4反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

  4.5子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。

print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集

  5,frozenset不可变集合,让集合变成不可变类型。

s = frozenset(barry)
print(s,type(s))  # frozenset({‘a‘, ‘y‘, ‘b‘, ‘r‘}) <class ‘frozenset‘>

文件操作:

一文件介绍:

计算机系统分为:计算机硬件,操作系统,应用程序三部分。

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

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

 1,文件路径
    2,编码方式:gbk,utf-8
    3,打开方式:只读,只写,读写,....
    ps:
        错误分析:1 unicodedecodeerror:文件存储和打开的编码不一致.
                 UnicodeDecodeError: gbk codec cant decode byte 0x80 in position 18: illegal multibyte sequence
                转译:路径前面+ r 或者是 双\                SyntaxError: (unicode error) unicodees
二 在python中
#1. 打开文件,得到文件句柄并赋值给一个变量
f=open(a.txt,r,encoding=utf-8) #默认打开模式就为r

#2. 通过句柄对文件进行操作
data=f.read()

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

三 f=open(‘a.txt‘,‘r‘)的过程分析

#1、由应用程序向操作系统发起系统调用open(...)

#2、操作系统打开该文件,并返回一个文件句柄给应用程序

#3、应用程序将文件句柄赋值给变量f

四 强调

#强调第一点:
打开一个文件包含两部分资源:操作系统级打开的文件+应用程序的变量。在操作完毕一个文件时,必须把与该文件的这两部分资源一个不落地回收,回收方法为:
1、f.close() #回收操作系统级打开的文件
2、del f #回收应用程序级的变量

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,
而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们,在操作完毕文件后,一定要记住f.close()

虽然我这么说,但是很多同学还是会很不要脸地忘记f.close(),对于这些不长脑子的同学,我们推荐傻瓜式操作方式:使用with关键字来帮我们管理上下文
with open(a.txt,w) as f:
    pass
 
with open(a.txt,r) as read_f,open(b.txt,w) as write_f:
    data=read_f.read()
    write_f.write(data)
#强调第二点:
f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。
这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。

f=open(a.txt,r,encoding=utf-8)

五 python2中的file与open

#首先在python3中操作文件只有一种选择,那就是open()

#而在python2中则有两种方式:file()与open()
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file

文件读写方法

技术分享图片
# f = open(‘C:\\Users\\Administrator\\Desktop\\new.txt‘,encoding=‘utf-8‘,mode=‘r‘)
# #open 他是windows系统的命令
# #r:只读
# # f 变量:f f_obj,obj,file_hl file_hanlder 文件句柄
# #通过对文件句柄的操作,来得到你想要的东西.
# content = f.read()
# print(content)
# #f.close 将你这文件句柄,或者是动作关闭,节省内存
# f.close()

#
#C:\\Users\\Administrator\\Desktop\\new.txt 绝对路径
#相对路径:同一个文件夹下的文件就是相对路径
# r
#rb一般用在非文字类型的文件:图片,视频
#文件的下载和上传的功能用b模式
# f = open(‘log‘,‘r‘,encoding=‘utf-8‘)
# content = f.read()
# print(content,type(content))
# f.close()
#r 五种模式:
#1 f.read() 全部读出来
#5,f.read(n)
# f = open(‘log‘,mode=‘r‘,encoding=‘utf-8‘)
# content = f.read(3) # r 模式:n 是按照字符读取
# print(content)
# f.close()

# f = open(‘log‘,mode=‘rb‘)
# content = f.read(5) # rb 模式:n 是按照字节读取
# print(content)
# f.close()
# # bytes ---> str
# s = b‘\xe4\xb8\xb0\xe5\x8e‘.decode(‘utf-8‘)
# print(s)


#2 f.readline() 按行读
# f = open(‘log‘,encoding=‘utf-8‘)
# line = f.readline()
# print(line)
# line1 = f.readline()
# print(line1)
# f.close()

# 3 f.readlines() 每一行作为一个元素,放在列表中
# f = open(‘log‘,encoding=‘utf-8‘)
# lines = f.readlines()
# print(lines)
# f.close()
#4 推荐方式 循环读取
# f = open(‘log‘,encoding=‘utf-8‘)
# for i in f:
#     print(i)
# f.close()

# w 如果没有文件,则创建文件写内容,
#   如果有文件则将原文件内容全部删除,在写.
# f = open(‘log‘,‘w‘,encoding=‘utf-8‘)
# f.write(‘Alex是sb‘)
# f.close()
# f = open(‘log1‘,‘w‘,encoding=‘utf-8‘)
# f.write(‘Alex依然是sb‘)
# f.close()

# f = open(‘log1‘,‘wb‘)
# f.write(‘Alex依然是sb‘.encode(‘utf-8‘))
# f.close()

#追加 a ab
# f = open(‘log‘,‘a‘,encoding=‘utf-8‘)
# f.write(‘wusir紧跟其后‘)
# f.close()
# r+     r+b
# f = open(‘log‘,‘r+‘,encoding=‘utf-8‘)
# print(f.read())
# f.write(‘fdsaf‘)
# f.close()

#w+  w+b
# f = open(‘log‘,‘w+‘,encoding=‘utf-8‘)
# f.write(‘aaaa‘)
# f.seek(0)  #移动光标
# print(f.read())
# f.close()

#a+

# f = open(‘log‘,‘a+‘,encoding=‘utf-8‘)
# f.write(‘aaaa‘)
# f.tell()
# print(f.tell())
# f.seek(2)
# # print(f.readable())
# # print(f.read())
# f.close()

# f = open(‘log‘,encoding=‘utf-8‘)
# f.seek(3)  #按照字节调整
# print(f.read())
# f.close()

# f = open(‘log‘,‘a‘,encoding=‘utf-8‘)
# f.truncate(3)  #截取 截取前面的内容
# f.close()


#常用方法: read() readline() seek()

‘‘‘
def close(self, *args, **kwargs): # real signature unknown
        关闭文件
        pass

    def fileno(self, *args, **kwargs): # real signature unknown
        文件描述符  
        pass

    def flush(self, *args, **kwargs): # real signature unknown
        刷新文件内部缓冲区
        pass

    def isatty(self, *args, **kwargs): # real signature unknown
        判断文件是否是同意tty设备
        pass

    def read(self, *args, **kwargs): # real signature unknown
        读取指定字节数据
        pass

    def readable(self, *args, **kwargs): # real signature unknown
        是否可读
        pass

    def readline(self, *args, **kwargs): # real signature unknown
        仅读取一行数据
        pass

    def seek(self, *args, **kwargs): # real signature unknown
        指定文件中指针位置
        pass

    def seekable(self, *args, **kwargs): # real signature unknown
        指针是否可操作
        pass

    def tell(self, *args, **kwargs): # real signature unknown
        获取指针位置
        pass

    def truncate(self, *args, **kwargs): # real signature unknown
        截断数据,仅保留指定之前数据
        pass

    def writable(self, *args, **kwargs): # real signature unknown
        是否可写
        pass

    def write(self, *args, **kwargs): # real signature unknown
        写内容
        pass

‘‘‘


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

#改动文件:
#1,创建一个新文件.
#2,读取原文件.
# import os
# with open(‘log‘,encoding=‘utf-8‘) as f1,\
#     open(‘log.bak‘,‘w‘,encoding=‘utf-8‘) as f2:
#     # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件件.
#     old_content = f1.read()
#     new_content = old_content.replace(‘alex‘,‘SB‘)
#     f2.write(new_content)
# #4,将原文件删除.
# os.remove(‘log‘)
# #5,将新文件重命名原文件名.
# os.rename(‘log.bak‘,‘log‘)
import os
with open(log,encoding=utf-8) as f1,    open(log.bak,w,encoding=utf-8) as f2:
    # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件件.
    for i in f1:
        i = i.replace(alex,SB)
        f2.write(i)
#4,将原文件删除.
os.remove(log)
#5,将新文件重命名原文件名.
os.rename(log.bak,log)
View Code

 



以上是关于python基础(集合文件操作)的主要内容,如果未能解决你的问题,请参考以下文章

python基础(集合,文件操作)

python基础文件操作和集合

python基础_集合文件操作

python基础操作_集合_三元运算

Python基础(集合用法文件操作字符编码转换函数)

第五章Python基础之集合与文件操作