读文件
>>> f = open('/mydir/a.txt', 'r')
>>>f.read() #一次读取文件的所有内容
>>>f.close() #关闭文件句柄
#Python引入了with语句来自动帮我们调用close()方法
with open('/mydir/a.txt' , 'r') as f:
f.read()
read(size) #读取size字节内容
readline() 每次读取一行内容
readlines() 一次读取所有行,返回为list
for line in f.readlines():
print line
字符编码
要读取非ASCII编码的文件,要以二进制模式打开,再解码。
f = open('/Users/a.txt', 'rb')
u = f.read().decode('gbk')
print u
Python还提供了一个codecs模块帮我们在读文件时自动转换编码,直接读出unicode.
import codecs
with codecs.open('/Users/a.txt', 'r', 'gbk') as f:
f.read() # u'\u6d4b\u8bd5'
写文件
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
使用with语句操作文件IO是个好习惯。
os模块
>>> import os
>>> os.name
'posix'
>>> os.uname()
('Darwin', 'bogon', '17.3.0', 'Darwin Kernel Version 17.3.0: Thu Nov 9 18:09:22 PST 2017; root:xnu-4570.31.3~1/RELEASE_X86_64', 'x86_64')
>>> os.environ
>>> os.getenv('HOME')
'/Users/xxx'
>>> os.path.abspath('.')
'/Users/xxx/PycharmProjects/modualstudy'
>>> os.path.join('/users/viean', 'mynewdir')
'/users/viean/mynewdir'
>>> os.mkdir('./datafiles')
>>> os.rmdir('./datafiles')
>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')
序列化:把变量变成可存储和传输的过程称为序列化;pickling.
反序列化:将变量从序列化后的结果重新读到内存;unpicking.
Python提供两个模块来实现序列化:cPickle和pickle
try:
import cPickle as pickle
except ImportError:
import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
#反序列化
>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}
JSON
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'
>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{u'age': 20, u'score': 88, u'name': u'Bob'}
#类也可以转化为了一个JSON对象,此处不详细描述,见https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000