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

推荐订阅源

B
Blog RSS Feed
Martin Fowler
Martin Fowler
爱范儿
爱范儿
IT之家
IT之家
Last Week in AI
Last Week in AI
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
The Cloudflare Blog
MyScale Blog
MyScale Blog
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
腾讯CDC
Microsoft Security Blog
Microsoft Security Blog

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参数优化 [分享]深度工作 你需要更多的思考时间
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

转载请注明出处,谢谢