Python IO编程

文件读写

  • 读文件
    由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
try:
    f = open('/path/to/file', 'r')   #二进制文件用'rb',特定字符编码encoding='gbk',忽略错误errors='ignore'
    print(f.read())
finally:
    if f:
        f.close()

可以用以下方法简写

with open('/path/to/file', 'r') as f:
    print(f.read())

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

  • 写文件
>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()

简写

with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

操作文件或目录

# 查看当前目录的绝对路径:
>>> os.path.abspath('.')
'/Users/michael'
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来: ,这是因为windows和linux路径结构不一样
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然后创建一个目录:
>>> os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
>>> os.rmdir('/Users/michael/testdir')
# 拆分路径
>>> os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')
# 获得文件扩展名
>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')
# 对文件重命名:
>>> os.rename('test.txt', 'test.py')
# 删掉文件:
>>> os.remove('test.py')
#复制在shutil模块的copyfile()函数
# 过滤文件
>>> [x for x in os.listdir('.') if os.path.isdir(x)]
['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Applications', 'Desktop', ...]

序列化

  • Json
import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

s = Student('Bob', 20, 88)

#序列
print(json.dumps(s, default=lambda obj: obj.__dict__))
  • 反序列
    如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例:
def dict2student(d):
    return Student(d['name'], d['age'], d['score'])


>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> print(json.loads(json_str, object_hook=dict2student))
<__main__.Student object at 0x10cd3c190>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • IO编程概念 IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由C...
    时间之友阅读 4,012评论 0 0
  • IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的...
    蝴蝶兰玫瑰阅读 2,750评论 0 1
  • IO在计算机中是指input/output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快...
    Sun_atom阅读 5,650评论 0 0
  • 希望你不再执着地等待, 希望你能做喜欢的事, 希望你身边有个她, 希望你早就忘记我。
    尚小童话阅读 1,220评论 0 1
  • 生于春的枝桠 一两瓣叶 遇素手牵引 在焙锅里升华 经烈火的考验卷曲成茗 遇清泉的滋润再展芳华 丝丝清香,斟满一杯闲...
    山上人家123阅读 1,643评论 13 19

友情链接更多精彩内容