一.文件操作

对文件的操作分三步:

1、打开文件获取文件的句柄,句柄就理解为这个文件

2、通过文件句柄操作文件

3、关闭文件。

1.文件基本操作:

  • f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读,
  • 在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open
  • frist_line = f.readline()#获取文件的第一行内容,返回的是一个list
  • print(frist_line)#打印第一行
  • res = f.read()#获取除了第一行剩下的所有文件内容,文件句柄发生了变化
  • print(res)
  • f.close()#关闭文件

2.文件打开模式:

    r:只读,不加模式默认为r
w:只写,[不可读,不存在则创建,存在则删除内容]
a:追加,[不可读,不存在则创建,存在则只追加内容] "+" 表示可以同时读写某个文件
r+ :读写--可读、可写、可追加,如果打开的文件不存在的话,会报错
w+ :写读--先创建文件,再写(在原文件上的修改都是覆盖操作)
a+ :追加读--默认打开句柄在末尾,读取需先seek(0)指定位置,一写句柄就到末尾了
#r和w,seek指定句柄可以覆盖修改,a+指定句柄也是追加 "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
# windows上换行符为 \r\n "b"表示处理二进制文件
rb:二进制文件读
wb:二进制文件写
ab:追加二进制
# 文件存在硬盘上都是二进制,前边说encoding='utf-8'是指把二进制转换成utf-8编码打开,
# 而“b”是指,不用转换编码,我直接读取二进制

3.文件操作:

f = open("1.txt", 'r', encoding="utf-8")
# encoding="utf-8",utf-8编码打开文件,windows下默认gbk打开
f.readline() # 读一行,字符串
f.readable() # 判断文件是否可读
f.writable() # 判断文件是否可写
f.encoding() # 打印文件的编码
f.read() # 读取文件句柄到结束所有内容,大文件时不要用,因为会把文件内容都读到内存中
f.readlines() # 读取文件所有内容,返回一个list,元素是每行的数据,大文件时不要用
f.write("天安门") # 写入内容,r和w模式,为句柄处覆盖写入,a模式写到最后
f.writelines(['zhangsan'],['李四']) #将一个列表写入文件中
f.flush() # 强制刷新(默认缓冲区满了存入磁盘)
f.close() # 文件关闭
f.closed() # 判断文件是否关闭 f.read(5) # 读取5个字符
f.tell() # 查看文件句柄位置。按照字符计数
f.seek(0) # 移动文件句柄到第0个字符位置 f.encoding # 文件编码
f.truncate() # 什么不写清空文件
f.truncate(10) # r模式截断出前10个字符,其他模式还是清空

大文件时,读取文件高效的操作方法:
用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了

f = open('file.txt')
for line in f: # f 变成了迭代器
  print(line) # 判断行的话,需自己加个计数器

4.文件内容修改 
前面说的文件修改,只是对原内容覆盖,并不会插入内容,原内容往后移,因为这样有可能就把其他文件覆盖了,文件发生损坏。so: 
文件修改两个办法: 
  1. 加载到内存,内存修改,覆盖写回 
  2. 另打开一个文件,修改完写到新文件中

with open("test", 'r+', encoding='utf-8') as fr
res = fr.read()
  new_res = res.replace('我','me')
  fr.write(new_res)
with open("test", 'r', encoding='utf-8') as f, \
open("test.tmp", 'w', encoding='utf-8') as f_new:
for line in f:
if "聚焦头条" in line:
line = line.replace("聚焦头条","fgf")
f_new.write(line) # os.path.exists("test.bak") 判断文件是否存在
# os.remove("test.bak") 删除文件
# os.rename(test.tmp, test) 重命名

5.文件关闭(with语句) 
为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log') as f:
pass

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。 
Python 2.7 后,with又支持同时对多个文件的上下文进行管理

二.集合

集合也是一种数据类型,一个类似列表的东西,特点是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

1、常用操作

去重
list_1 = [1,1,2,3,4,5,6,6,7,7,8,8,9,9,3]
set_1 = set(list_1)
>>> set_1
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# 集合用{}表示
交集
set_2 ={0,2,3,4}
set_1.intersection(set_2)
  set_1&set_2
并集:
set_1.union(set_2)
  set_1 | set_2
差集:
set_1.difference(set_2)
  set_1 - set_2
# in set_1 but not in set_2
子集:
set_1.issubset(set_2) #判断set_1是不是set_2的子集
父集:
set_1.issuperset(set_2) #判断
set_1是不是set_2的父集
对称差集:(并集去除交集,即并集和交集的差集) 输出2个列表都没有的值
  set_1.symmetric_difference(set_2) 即(set_1 | set_2) - (set_1 & set_2)
set_1 ^ set_2
判断有没有交集,无交集,返回True
  set_1.isdisjoint(set_2)

2、符号操作

    & : 交集        intersection
| :并集 union
- :差集 difference
s <= t :子集 issubset
s >= t :父集 issuperset
^ :对称差集 symmetric_difference

3、集合增删改查

添加:
set_1.add(99)
批量添加
set_1.update([1,2,3,4])
删除:
set_1.remove('h') # 没有则报错
set_1.discard(99) # 在则删除,不在就不操作。无返回信息
随机删:
set_1.pop()
长度:
len(set_1)
是否属于判断
s in set_1 # (判断成员在不在都是这么写,字典中判断key)
返回 set “s”的一个浅复制
s.copy()
 
 

python基础(四)文件操作和集合的更多相关文章

  1. python基础四(文件操作)

    1.文件操作的基本流程 1.1 文件操作的基本流程 # 绝对路径 # r"d:/葫芦娃.txt 前面的r 为转义. linux平台和windows的分隔符不同 f = open(r" ...

  2. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  3. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  4. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  5. 【python基础】文件操作

    文件操作目录 一 .文件操作 二 .打开文件的模式 三 .操作文件的方法 四 .文件内光标移动 五. 文件的修改 一.文件操作介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用pyt ...

  6. python基础之数据类型操作补充,集合及其操作,深浅拷贝

    内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰&qu ...

  7. python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...

  8. Python基础 之 文件操作

    文件操作 一.路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二.编码方式 utf-8 gbk... 三.操作方式 1.只读 r 和 rb 绝对路径的打开操作 ...

  9. Python基础学习——文件操作、函数

    一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...

  10. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

随机推荐

  1. 2017-2018-2 《网络对抗技术》20155322 Exp7 网络欺诈防范

    [-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-简单应用SET工具建立冒名网站 2.2-ettercap DNS spoof 2.3 ...

  2. PostgreSQL的autovacuum 与 vacuum full

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 作者 高健@博客园  luckyjackgao ...

  3. python基础学习1-列表推导式和字典推导式

    #!/usr/bin/env python # -*- coding:utf-8 -*- #列表推导式 取得100内可以被2整除且不能被3整除的数字 a=[i for i in range(100) ...

  4. 一维码Code 128简介及其解码实现(zxing-cpp)

    一维码Code 128:1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大. Cod ...

  5. spring 各个版本的源码、jar包和源码jar包下载地址

    spring各个版本的源码jar包.文档jar包和spring的jar包 http://maven.springframework.org/release/org/springframework/sp ...

  6. bootstrap学习笔记(4)

    bootstrap辅助类 总结几个常用的辅助类 .text-hide将页面元素所包含的文本设置为透明并且字体设置为0所以文本就看不见了 .hidden将页面的元素visible属性设置为hidden; ...

  7. 常见面试算法题JS实现-仅用递归函数和栈操作逆序一个栈

    前言: 因为JAVA和JS语言特性的不同,有些东西在JAVA中可能需要一些技巧和手段才能实现的复杂程序,但是在JS中可能就是天然存在的,所以这套书里面的题目不会全部用JS去实现一遍,因为可能JS的实现 ...

  8. 开源第三方登录组件OAuthLogin2.0 架构解析及开源地址

    OAuthLogin2.0介绍地址: 入门地址:http://www.cnblogs.com/dazhuangtage/p/6306133.html Nuget地址:https://www.nuget ...

  9. Unity依赖注入(笔记)

    一.介绍 控制反转(Inversion of Control,简称IoC):整洁架构思想,不允许内部获知外部的存在,这就导致了我们必须在内层定义与外层交互的接口,通过依赖注入的方式将外层实现注入到内部 ...

  10. GitLab篇之备份还原

    1. GitLab备份配置 输入以下命令,打开gitlab配置文件 [root@code-server ~]# vim /etc/gitlab/gitlab.rb 修改以下配置,gitlab有自动清理 ...