IO编程

读文件

>>> 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

你可能感兴趣的:(IO编程)