Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块
Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块
目录
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典
Python第四天 流程控制 if else条件判断 for循环 while循环
Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数
Python第七天 函数 函数参数 函数变量 函数返回值 多类型传值 冗余参数 函数递归调用 匿名函数 内置函数 列表表达式/列表重写
Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第九天 面向对象 类定义 类的属性 类的方法 内部类 垃圾回收机制 类的继承 装饰器
Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 标准错误 重定向 输出流和输入流
Python第十二天 收集主机信息 正则表达式 无名分组 有名分组
Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
注意:python里windows的路径要写成 /
f = open('F:/a.txt', 'a') #以写的方式打开
Python文件访问
1、内置函数 open
open
访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
x 打开一个文件只用于写入。如果该文件已存在则抛出异常。如果该文件不存在,创建新文件。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
with open :python2.6才有的方法,python2.5没有,用with open,退出with open代码块之后的代码不需要显式fd.close()
https://www.birdpython.com/posts/2/44/
文件对象
像 open 函数返回的需要用 read 函数读取数据的对象,在 Python 中统称为 file-like Object。除了 file ,还可以是内存的字节流,网络流,自定义流等等。file-like Object 不要求从特定类继承,只要写个 read 函数就行。
我们后面会学习各种文件对象,特别是在网络编程中,我们要学习的套接字也是文件对象,套接字的 read 函数是从网卡中读入字节流,write 函数是告诉操作系统把字节流写入到网卡,这样就可以和远程机器进行通信了。
startswith函数、split函数 、splitlines函数
str.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
str1 = 'ab c\n\nde fg\rkl\r\n'
print str1.splitlines();
str.split(self, sep=None, maxsplit=None)
If maxsplit is given, at most maxsplit splits are done.
maxsplit=1,字符串里出现了两个空格,那么只分割第一个空格,第二个空格不做任何处理
txt = "Google#Runoob#Taobao#Facebook" # 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
str.rsplit(self, sep=None, maxsplit=None)
跟split一样,只不过rsplit是从右开始切
txt = "Google#Runoob#Taobao#Facebook" # 第二个参数为 1,返回两个参数列表
x = txt.rsplit("#", 1)
str.startswith(self, prefix, start=None, end=None)
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
若不存在会创建新文件的打开方式:a,a+,w,w+
r+:可读可写,若文件不存在,报错,r+进行覆盖写
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#__author__="huazai"
"""
pycharm 使用指南
Date:2016.08.12
""" with open('/proc/meminfo') as fd:
for line in fd:
if line.startswith('MemTotal'):
total = line.split()[1]
continue
if line.startswith('MemFree'):
free = line.split()[1]
break print "free:%.2f" % (int(free) / 1024.0) + 'M'
print "total:%.2f" % (int(total) / 1024.0) + 'M'
文件的方法
fd.close():不执行fd.close(),python程序退出的时候也会close文件
fd.read() 读取文件的所有内容
fd.readline() 一次读取一行
fd.readlines() :将文件的内容保存到列表,列表的一行对应文件的一行,每个元素都会加上一个换行符\n
next():一行一行读取
fd.write() 写字符串到文件中,并返回写入的字符数
fd.writelines() 写一个字符串列表到文件中
for循环访问文件
序列自由解包
假如我想得到文件第一行和最后一行内容,这样即可:
with open('file_name') as f:
first, *_, last = f.readlines()
另外:不仅列表是这样,元组和字典等序列都有这样的特性哦。
第一种 readlines全部把文件内容读到内存
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#__author__="huazai"
"""
pycharm 使用指南
Date:2016.08.12
""" with open('C:\Users\Administrator\Desktop\mRemoteNG\mRemoteNG-Portable-1.69\CREDITS.TXT') as fd:
for line in fd.readlines():
print line,
---------------------------------------------------------------
第二种 一行一行的读到内存 比较节省内存
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#__author__="huazai"
"""
pycharm 使用指南
Date:2016.08.12
""" with open('C:\Users\Administrator\Desktop\mRemoteNG\mRemoteNG-Portable-1.69\CREDITS.TXT') as fd:
for line in fd:
print line if fd.next().startswith('VncSharp'):
break
这里的fd是一个对象,有fd.next()方法,是显示文件下一行,那么for i in fd就相当于一直在执行fd.next()方法,直到文件结束
2、codecs模块的open函数
import codecs
fw = codecs.open('test1.txt','a','utf-8')
fw.write(line2)
或
import codecs
with codecs.open('3.txt', 'rb', 'utf-8') as fd:
a=fd.readline()
print a
#-*- encoding: gb2312 -*-
import codecs, sys # 用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode
bfile = codecs.open("dddd.txt", 'r', "big5")
#bfile = open("dddd.txt", 'r') ss = bfile.read()
bfile.close()
# 输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数来打开文件,这里看到的必定是乱码
print ss, type(ss)
while循环访问文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#__author__="huazai"
"""
pycharm 使用指南
Date:2016.08.12
""" with open('C:\Users\Administrator\Desktop\mRemoteNG\mRemoteNG-Portable-1.69\CREDITS.TXT') as fd:
while True:
line = fd.readline()
print line,
if not line:
break
替换文件内容,两个文件同时使用上下文管理器
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author : huazai
# @Time : 2018/5/31 10:45
# @File : aa.py
# @Description : import codecs
import re
import os def sub_string():
'''
替换字符串
:return:
'''
with codecs.open('/etc/redis.conf') as f1, codecs.open('/etc/redis.conf.bak', "w") as f2:
content = ''.join(f1.readlines())
content = re.sub(r'\nbind 127.0.0.1', '\nbind {}'.format('1.1.1.1'), content, count=1)
f2.write(content)
os.remove('/etc/redis.conf')
os.rename('/etc/redis.conf.bak', '/etc/redis.conf') def sub_cap():
'''
将每个单词首字母转为大写
:return:
'''
with codecs.open('/etc/redis.conf') as f1, codecs.open('/etc/redis.conf.bak', "w") as f2:
for line in f1:
f2.write(" ".join([word.capitalize() for word in line.split()]))
f2.write('\n')
os.remove('/etc/redis.conf')
os.rename('/etc/redis.conf.bak', '/etc/redis.conf') if __name__ == '__main__':
sub_cap()
sub_string()
返回某一行的内容
linecache模块
import linecache
print linecache.getline('3.txt',2) # 返回文件的第二行的内容
print linecache.getlines('3.txt') #返回文件的所有内容
在一个2c4g的服务器上如何用python操作8GB的超大文件,知数堂2019-4-10
在一个2c4g的服务器上如何用python操作8GB的超大文件
1、使用with open的方式,for line in f文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理,并且能够自动关闭文件,推荐该方式
举例:
with open('filename') as f:
for line in f:
do_things(line) 2、open file的方式,可以通过read(size)指定每次读取的大小,将大文件切割成小文件来读取,每次处理完小块即释放内存
举例:
f = open(filePath)
while True:
content = f.read(chunk_size)
do_things(content) 3、linecache模块,可以指定读取文件某一行
举例:
content = linecache.getline('filename', linenum)
do_things(content)
filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具
python标准库还提供了difflib模块用于比较文件的内容
filecmp.cmp(f1, f2[, shallow])
比较两个文件的内容是否匹配。
参数f1,f2指定要比较的文件的路径。可选参数shallow指定比较文件时是否需要考虑文件本身的属性(通过os.stat函数可以获得文件属性)。
如果文件内容匹配,函数返回True,否则返回False。
r = filecmp.cmp('F:\\temp\\py\\bisect2.py', 'F:\\temp\\py\\bisect2.py')
print(r)
filecmp.cmpfiles(dir1, dir2, common[, shallow]):
比较两个文件夹内指定文件是否相等。
参数dir1,dir2指定要比较的文件夹,参数common指定要比较的文件名列表。函数返回包含3个list元素的元组,分别表示匹配、不匹配以及错误的文件列表。
错误的文件指的是不存在的文件,或文件被琐定不可读,或没权限读文件,或者由于其他原因访问不了该文件。
dir1 = 'F:\\temp\\py\\dir1'
dir2 = 'F:\\temp\\py\\dir2'
r = filecmp.cmpfiles(dir1, dir2, ['difflib1.py', 'difflib5.py', 'test1.txt'])
print(r)
dircmp类
用于比较文件夹,通过该类比较两个文件夹,可以获取一些详细的比较结果(如只在A文件夹存在的文件列表),并支持子文件夹的递归比较。
dircmp提供了三个方法用于报告比较的结果
report():只比较指定文件夹中的内容(文件与文件夹)
report_partial_closure():比较文件夹及第一级子文件夹的内容
report_full_closure():递归比较所有的文件夹的内容
dircmp还提供了下面这些属性用于获取比较的详细结果
left_list:左边文件夹中的文件与文件夹列表;
right_list:右边文件夹中的文件与文件夹列表;
common:两边文件夹中都存在的文件或文件夹;
left_only:只在左边文件夹中存在的文件或文件夹;
right_only:只在右边文件夹中存在的文件或文件夹;
common_dirs:两边文件夹都存在的子文件夹;
common_files:两边文件夹都存在的子文件;
common_funny:两边文件夹都存在的子文件夹;
same_files:匹配的文件;
diff_files:不匹配的文件;
funny_files:两边文件夹中都存在,但无法比较的文件;
subdirs:
Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块的更多相关文章
- python strip() 函数和 split() 函数的详解及实例
strip是删除的意思:split则是分割的意思.strip可以删除字符串的某些字符,split则是根据规定的字符将字符串进行分割. 1.Python strip()函数 介绍 函数原型 声明:s为字 ...
- Python的join()函数和split()函数
join()方法 ------------------------------------------------------------------------------------------- ...
- python strip()函数和Split函数的用法总结
strip函数原型 声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串.不能删除中间的字符或是字符串. s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- python Strip函数和Split函数的用法总结 (python2.0,但用法与3.0是差不多的)
strip函数原型 声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串.不能删除中间的字符或是字符串. s.strip(rm) 删除s字符串中开头.结尾处, ...
- Python第四天 流程控制 if else条件判断 for循环 while循环
Python第四天 流程控制 if else条件判断 for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- python笔记五:IO与文件
1.python IO: Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘: 1)raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串 2 ...
- python 修改文件的创建时间、修改时间、访问时间
目录 python 修改文件创建.修改.访问时间 方案一 方案二(无法修改文件创建时间) python 修改文件创建.修改.访问时间 突如其来想知道一下 python 如何修改文件的属性(创建.修改. ...
- Python 获取文件的创建时间,修改时间和访问时间
# 用到的知识# os.path.getatime(file) 输出文件访问时间# os.path.getctime(file) 输出文件的创建时间# os.path.getmtime(file) 输 ...
随机推荐
- Hystrix概念设计
1. Hystrix概念设计 1.1. 大纲 1.2. 基本的容错模式 1.3. 断路器模式 1.4. 舱壁隔离模式 1.5. 容错理念 凡事依赖都可能失败 凡事资源都有限制 网络并不可靠 延迟是应用 ...
- Truncated incorrect DOUBLE value: 'd'的解决方法(jdbc)
今天写jdbc中dao的增删改查时遇到了一个问题,花费了好长时间,不过还好,有我峰哥出头,问题解决了,在这做个分享,对峰哥表达一下感激之情 网上搜索到的对“Truncated incorrect DO ...
- 机器学习入门18 - 生产机器学习系统(Production ML Systems)
除了实现机器学习算法之外,机器学习还包含许多其他内容.生产环境机器学习系统包含大量组件.无需自行构建所有内容,而是应该尽可能重复使用常规机器学习系统组件.通过了解机器学习系统的一些范例及其要求,可以明 ...
- python高级-生成器(17)
1. 什么是⽣成器 通过列表⽣成式,我们可以直接创建⼀个列表.但是,受到内存限制,列表容量肯定是有限的.⽽且,创建⼀个包含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素 ...
- Python内置函数(21)——filter
英文文档: filter(function, iterable) Construct an iterator from those elements of iterable for which fun ...
- hexo配置自己的博客站点
最近业余时间利用hexo为自己搭建一个高度自定义的个人站点,站点发布在github上,访问地址为:https://cqhaibin.github.io/.本博客简单介绍实现此站点的过程.效果图如下 构 ...
- 『高次同余方程 Baby Step Giant Step算法』
高次同余方程 一般来说,高次同余方程分\(a^x \equiv b(mod\ p)\)和\(x^a \equiv b(mod\ p)\)两种,其中后者的难度较大,本片博客仅将介绍第一类方程的解决方法. ...
- 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之 DelayedWorkQueue
我们知道线程池运行时,会不断从任务队列中获取任务,然后执行任务.如果我们想实现延时或者定时执行任务,重要一点就是任务队列会根据任务延时时间的不同进行排序,延时时间越短地就排在队列的前面,先被获取执行. ...
- 并发编程(七)——AbstractQueuedSynchronizer 之 CountDownLatch、CyclicBarrier、Semaphore 源码分析
这篇,我们的关注点是 AQS 最后的部分,共享模式的使用.本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier.Semaphore 的 ...
- macOS webview编程
好像是macOS10.10之后,以及iOS8之后,新出现的WKWebview组件就迅速的替代了Webview及UIWebView.后者的确存在一些无法解决的bug,诸如架构导致的速度缓慢和内存泄漏. ...