惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
爱范儿
爱范儿
Y
Y Combinator Blog
T
Tor Project blog
V
Visual Studio Blog
U
Unit 42
B
Blog RSS Feed
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
G
Google Developers Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
F
Fortinet All Blogs
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
Recorded Future
Recorded Future
博客园_首页
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
P
Proofpoint News Feed
Jina AI
Jina AI
博客园 - 【当耐特】
S
Security @ Cisco Blogs
I
Intezer
MyScale Blog
MyScale Blog
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
腾讯CDC
T
Tenable Blog
A
Arctic Wolf
T
Threat Research - Cisco Blogs
S
Securelist
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
C
Check Point Blog
NISL@THU
NISL@THU
Microsoft Security Blog
Microsoft Security Blog
V
Vulnerabilities – Threatpost

Posts on WKLKEN THINKING

apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 [分享]深度工作 你需要更多的思考时间 Django项目重构小结 工作七年小结: 学习,生活及其他 [分享]bash日常: bash-utils 极客时间推广海报 2017总结: 予时光以意义 k8s APIServer源码: api注册详细细节 k8s APIServer源码: api注册主体流程 k8s APIServer源码: 服务启动 k8s APIServer源码: go-restful框架 重构 - 读书笔记(Python示例) 写给新人的沟通建议 vim 杂谈 - 关于快速编辑 vim 杂谈 - 关于移动 读书笔记-重构: 章11 处理概括关系 读书笔记-重构: 章10 简化函数调用 读书笔记-重构: 章9 简化表达式 读书笔记-重构: 章8 重新组织数据 读书笔记-重构: 章7 在对象之间搬移特性 读书笔记-重构: 章6 重新组织函数 Python 代码规范小结 [分享]关于vim ElasticSearch集群部署文档 Logstash+ElasticSearch处理mysql慢查询日志 [分享]关于代码调试DE那些事 Logstash+ElasticSearch+Kibana- 实现相对通用的数据收集分析 ELK维护的一些点(二) [分享]Python源码剖析-数据结构 一些Centos Python生产环境的部署命令 摘录<<6个月学会任何一种外语>> ELK 维护的一些点 也许是一个新的开始 一些vim的个性化配置 读书笔记-调试九法 这段时间的一些想法 Python 源码阅读 - 垃圾回收机制 我为什么要写博客 APUE笔记-第一章 UNIX基础知识 Python源码阅读-闭包的实现 Python源码阅读-内存管理机制(二) Python源码阅读-内存管理机制(一) Python-基础-数据结构小结 '活动'设计的一些trick 一些简单的Python测试题 我的tmux配置及说明【k-tmux】 Review and Restart 工作四周年小结 vim插件: surround & repeat[成对符号编辑] vim插件: gundo[时光机] vim插件: expand-region[区域选中] vim插件: quickrun[快速执行] vim插件: trailing-whitespace[行尾空格处理] vim插件: closetag[成对标签补全] vim插件: ctrlp[文件搜索] vim插件: airline[状态栏增强] vim插件: theme[主题] vim插件: tagbar[大纲式导航] vim插件: nerdcommenter[快速注释] vim插件: rainbow_parentheses[括号高亮] vim插件: syntastic[语法检查] vim插件: delimitmate[符号自动补全] vim插件: matchit[成对标签跳转] vim插件: easy-align[快速对齐] vim插件: multiple-cursors[多光标操作] vim插件: vim-signature[快速标记跳转] vim插件: easymotion[快速跳转] vim插件: vundle[管理插件] Elasticsearch几个问题的解决 分享一份 Vim 简介PPT k-vim 更新9.0版本 关于知识管理工具的思考
Python-基础-文件处理小结
2013-03-16 · via Posts on WKLKEN THINKING

##文件处理

python常用,主要是用于文件操作,配合字符串操作,数值计算等,完成数据处理。

###文件模式

打开一个文件,返回一个文件对象。可以用open()或者file(),建议使用前者

file_object = open(file_name, access_mode = ‘r’, buffering = -1)
file_name:打开的文件名,若非当前路径,需指出具体路径
mode:可选参数,文件打开模式
bufsize:可选参数,是否使用缓存

####mode

模式	    描述
r	    以读方式打开文件,可读取文件信息.文件必须已存在
w	    以写方式打开文件,可向文件写入信息。存在则清空,不存在创建
a	    以追加方式打开文件,文件指针自动移到文件尾。追加
r+	    以读写方式打开文件,可对文件进行读和写操作。
w+	    消除文件内容,然后以读写方式打开文件。
a+	    以读写方式打开文件,并把文件指针移到文件尾。
b	    以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的

U      通用换行符支持,任何系统下的文件, 不管换行符是什么, 使用U模式打开时, 换行符都会被替换为NEWLINE(\n)

+ 代表同时作为输入和输出文件,可以对相同文件进行读写

b代表二进制数据处理

和 r/w/a组合. r+ 使用读写方式打开, rb二进制读

注意,在mode中使用b,b不能作为第一个字符出现

####bufsize bufsize取值 描述

0	禁用缓冲
1	行缓冲,只缓冲一行
\>1	指定缓冲区的大小,定制
<1	系统默认的缓冲区大小,m默认

###文件对象属性 常用几个:

file.name 文件名

file.encoding文件使用编码,None 时使用系统默认编码

file.mode Access文件打开时使用的额访问模式

file.closed表文件已关闭,否则False

file.newlines未读取到分隔符时为None,包含行结束符的列表

file.softspace为0表示在输出一数据后,加上一空格,1表示不加,内部使用

:::python
f = open("a.py", "r")
print f.name
print f.mode
print f.encoding
print f.closed

###文件操作 获取帮助

:::python
dir(f)
help(f.seek)

操作列表

#读
file.read(size=-1) 	     从文件读取size个字节,未给定或为负,读取所有
file.readline(size=-1) 	读取并返回一行,或返回最大size个字符,包括\n
file.readlines(sizeint=0) 	读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区

#写
file.write(str) 	向文件中写入字符串(文本或二进制)
file.writelines(seq) 	写入多行,向文件中写入一个字符串列表,注意,要自己加入每行的换行符

#其他
file.seek(off,whence=0) 	从文件中给移动指针,从whence(0起始,1当前,2末尾)偏移off个字节,正结束方向移动,负往开始方向移动
file.tell()	返回当前文件中的位置。获得文件指针位置
file.truncate(size=file.tell())	截取文件到最大size个字节,默认为当前文件位置
file.close()    关闭打开的文件,垃圾回收机制也会在文件对象的引用计数降至0的时候自动关闭文件
file.fileno()    返回文件描述符(file descriptor FD 整型)是一个整数, 可以用在如os模块的read方法等一些底层操作上.
file.flush()    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入.
file.isatty()	判断file是否是类tty设备
file.next()	    返回文件下一行

###最佳实践

1.养成手动close

:::python
f = open('a.py')
……
f.close()

2.读取大文件

方法一:一次性读入,去左右空白+换行符,文件太大不建议这么做

:::python
f = open('bigdata')
lines = [ line.strip() for line in f.readlines()]
…..
f.close()

方法二:迭代

:::python
f = open('bigdata')
for line in f:
    line = line.strip()
…..
f.close()

3.上下文管理器 用with,等价与上面方法二,注意不用显式close

>>> with open('a.py') as f:
...     for line in f:
...         line = line.strip()

4.去除换行符/跳过空行

:::python
line = line.rstrip()

if not line.strip():
    # if line is empty
    continue            # skip it

###StringIO StringIO“虚拟文件”不是永久的

如果不保存它(如将它写入一个真正的文件,或者使用 shelve 模块或数据库),则程序结束时,它将消失

>>> import cStringIO
>>> fs = cStringIO.StringIO()
>>> fs.write('hello world')
>>> fs.getvalue()
'hello world'

###pickle pickle任意python对象和字符串之间的序列化 类似java序列化存储到文件的过程

:::python
# encoding: utf-8

import pickle

d = {'a':1,'b':2}

f = open('datafile.pkl','wb')
pickle.dump(d,f)
f.close()

f=open('datafile.pkl','rb')
e=pickle.load(f)
print e

###struct

能够构造并解析打包的二进制数据

:::python
#!/usr/bin/env python
# encoding: utf-8

import struct
f = open('data.bin','wb')
data = struct.pack('hhl', 1, 2, 3)
f.write(data)
f.close()

f = open('data.bin','rb')
data = f.read()
values = struct.unpack('hhl',data)
print values

###其他相关模块

base64  二进制字符串和文本字符串之间的编码/解码操作
binascii  二进制和ascii编码的二进制字符串间的编码/解码操作
bz2  访问BZ2格式的压缩文件
csv  访问csv文件(逗号分割文件)
filecmp   用于比较目录和文件
fileinput  提供多个文本文件的行迭代器
getopt/optparse  提供了命令行参数的解析/处理
glob/fnmatch  提供Unix样式的通配符匹配功能
gzip/zlib   读写GNU zip(gzip)文件(压缩需要zlib模块)
shutil  提供高级文件访问能力
c/StringIO   对字符串对象提供类文件接口
tarfile  读写TAR归档文件, 支持压缩文件
tempfile   创建一个临时文件(名)
uu  格式的编码和解码
zipfile  用于读取ZIP归档文件的工具

The end!

To be continue

wklken

Email: wklken@yeah.net

Blog: http://blog.csdn.net/wklken

2013-03-16

转载请注明出处,谢谢