iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python I/O编程
  • 632
分享到

python I/O编程

python 2023-01-31 01:01:09 632人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

文件读写读文件:open()、read()、close()。对于文件的操作一般都放在try ... except ... finally一段完整的文件读取代码:try:     f = open('/path/to/file', 'r')

文件读写

读文件:open()、read()、close()。对于文件的操作一般都放在try ... except ... finally

一段完整的文件读取代码:

try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

简写:

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

简写的好处是:简洁,且不必调用close()方法。

read()一次读取全部内容,防止文件太大内存溢出,可以反复调用read(size)方法,每次最多读取size个字节内容。readline()一次读一行,readlines()一次读取所有内容并按行返回list。


open()返回的有个read()的对象,叫做file-like object。还可以是字节流,网络流,自定义流。它不要求从特定类继承,只要写个read()方法就成。

打开二进制文件需要一个b模式。

f = open('/path/to/file', 'rb')
f.read()

读取非utf8的文本,需要给open()传入encoding参数。

f = open('/path/to/file', 'r', encoding='gbk'
f.read()

编码不规范的文件,open()函数可使用errors参数,遇到编码错误的处理一般是忽略

f = open('/path/to/file', 'r', encoding='gbk', errors=ignore')


写文件:open()、write()、close()。和读文件一样。调用open()时,使用'w'或'wb'。

f = open('/path/to/file', 'w')
f.write("hello, world")
f.close()

方式写文件的数据丢失,使用with语句:

with open('/path/to/file', 'w') as f:
    f.write('hello, world')

写特殊编码的文件,使用open()函数传入encoding参数。


写内存流的时候使用Stringio和BytesIO

str写入StringIO,需要创建一个StringIO,然后写入。

from io import StringIO
f = StringIO()
f.write('hello world!')
print(f.getvalue())
hello world!

getvalue()获得写入后的str。

读取StringIO的内容

from io import StringIO
f = StringIO('hello\nHi\nGoodbye!)
while True:
    s = f.readline()
    if s == '':
        break
    print(s.strip())
    
hello
Hi
goodbye!

二进制的操作使用BytesIO

from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))

print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'

读操作同StringIO()


文件和目录的操作

使用os和os.path模块。

os.name

os.uname()

os.environ

os.environ.get('PATH')

os.path.abspath('.')


把一个目录加入另一个目录

os.path.join('/path/to', 'test')把test加入到to中

os.mkdir('/path/to/test')创建一个目录

os.rmdir('/path/to/test')删除一个目录

os.path.split('/path/to/test/test.txt')拆分一个文件的路径为绝对路径和一个文件名。

('/path/to/test', 'test.txt')

os.path.splitext('/path/to/test.txt')

('/path/to/test', '.txt')

上面这些操作不要求目录或文件存在,只是对字符串的操作。


os.rename('test.txt', 'test.py')文件改名

os.remove('test.py')删除文件


shutil模块提供了文件复制的函数copyfile()



序列化 -- pickling   反序列化 -- unpickling

其他语言称为 serialization,marshalling,flattening

序列化:就是把变量从内存中变成可存储或传输的过程。序列化之后可以把序列化后的内容写入磁盘,或传输。

反序列化:把变量内容从序列化的对象重新读到内存里。

序列化和反序列化实例:

import pickle
d = dict(name='bart', age=20, score=88)
pickle.dumps(d)


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':'bart'}


JSON的操作 -- pythonjson比xml更快。

import json
d = dict(name='bart', age=20, score=88)
json.dumps(d)


json_str = '{"age":20, "score":88, "name":"bart"}'
json.loads(json_str)
{"age":20, "score":88, "name":"bart"}

把一个对象序列化为一个json

import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score
        
s = Student('bart', 20, 88)
# print(json.dumps(s)) typeerror

# 使用dumps的可选参数defalut把任意一个对象变成一个可序列化为json的对象。需要一个函数来转换。

def student2dict(std):
    return {
        'name': std.name,
        'age': std.age,
        'score': std.score
    }
    
print(json.dumps(s, default=student2dict))
{"age":20, "name":bart, "score":88}

# 把任意class变为dict:
print(json.dumps(s, default=lamba obj:obj.__dict__))    

# class的实例都有一个__dict__属性。除了__slots__的class

# 要把Json反序列化一个Student对象实例,loads()首先转换出一个dict对象,然后传入的object_hook函数负责把dict转换为Student实例:

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

    
json_str = '{"age":20, "name": "bart", "score":88}'
print(json.loads(json_str, object_hook=dict2student))
<__main__.Student object at 0x10cd3c190>





























--结束END--

本文标题: python I/O编程

本文链接: https://www.lsjlt.com/news/185056.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python I/O编程
    文件读写读文件:open()、read()、close()。对于文件的操作一般都放在try ... except ... finally一段完整的文件读取代码:try:     f = open('/path/to/file', 'r') ...
    99+
    2023-01-31
    python
  • Python 文件I/O
    本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档。打印到屏幕最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下:#!/u...
    99+
    2023-01-31
    文件 Python
  • Python教程:精简概述I/O模型与I/O操作
    Python教程:精简概述I/O模型与I/O操作一. I/O 模型1. 特指 Linux 下的网络 IO,一般分类:阻塞IO(blocking IO)非阻塞IO(non-blocking IO)IO多路复用(IO multiplexing)...
    99+
    2023-06-01
  • Python之I/O多路复用
    回顾Socket一、Socket起源:socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些so...
    99+
    2023-01-31
    多路 复用 Python
  • kernel: Buffer I/O e
    http://blog.csdn.net/kinges/article/details/40425841转自:http://blog.csdn.net/kinges/article/details/40425841主机报错信息:Buffer...
    99+
    2023-01-31
    kernel Buffer
  • Python基础:输入与输出(I/O)
    来做一个NLP任务   步骤为:     1.读取文件;     2.去除所有标点符号和换行符,并把所有大写变成小写;     3.合并相同的词,统计每个词出现的频率,并按照词频从大到小排序;     4.将结果按行输出到文件 out....
    99+
    2023-01-31
    基础 Python
  • 3.从print到I/O
    为何对双引号念念不忘? >>> print("hello, world!") hello, world!   平x而论,既然在意双引号的去掉,为何不在意括号的去掉?甚至是print的去掉?前面说过,python程序就是一...
    99+
    2023-01-30
    print
  • 计算机网络编程 | 多路I/O转接服务器
    欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学...
    99+
    2023-08-18
    服务器 IO多路转接 计算机网络 tcp/ip linux 网络编程 select 原力计划
  • 终端I/O---ttyS3: 3 inp
    没系统地学过终端I/O的控制,只是按照别人的要求配置了一下背景:gps插在串口3上#include <stdio.h>#include "time.h"#include <sys/types.h> #include ...
    99+
    2023-01-31
    终端 inp
  • C++ 函数在网络编程中如何实现流式 I/O?
    答案: c++++ 中流式 i/o 函数可用于与网络套接字进行读写操作,就像操作文件一样。描述:使用 std::cout 和 std::cin 函数写入和读取流。使用 std::fstr...
    99+
    2024-04-27
    网络编程 流式 i/o c++ 标准库
  • ORA-27613: Smart I/O failed due to an I/O error on the cell “string”. disk: “strin
    文档解释 ORA-27613: Smart I/O failed due to an I/O error on the cell “string”. disk: “string”, block...
    99+
    2023-11-05
    报错 故障 due
  • 怎么使用Python中的I/O相关指令
    这篇文章主要介绍“怎么使用Python中的I/O相关指令”,在日常操作中,相信很多人在怎么使用Python中的I/O相关指令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python中的I/O相关指令...
    99+
    2023-06-16
  • ORA-27603: Cell storage I/O error, I/O failed on disk string at offset string for data length string
    文档解释 ORA-27603: Cell storage I/O error, I/O failed on disk string at offset string for data length string Cause: Cell st...
    99+
    2023-11-05
    报错 故障 storage
  • C++ 函数在网络编程中如何实现非阻塞 I/O?
    c++++中使用非阻塞i/o 进行网络编程可以显著提升应用程序的响应能力和吞吐量。原理:使用异步i/o操作,应用程序在发出i/o请求后继续执行,内核完成操作后生成事件通知应用程序。实现:...
    99+
    2024-04-27
    网络编程 非阻塞 i/o c++
  • Netty支持什么I/O模式
    本篇内容主要讲解“Netty支持什么I/O模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Netty支持什么I/O模式”吧! 1 经典I/O模式BI...
    99+
    2024-04-02
  • 怎么理解I/O的原理
    这期内容当中小编将会给大家带来有关 怎么理解I/O的原理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.IO 软件原理I/O 软件目标设备独立性现在让我们转向对 I/O 软件的研究,I/O 软件设计一个...
    99+
    2023-06-16
  • PHP 异步编程指南:探索事件循环和非阻塞 I/O
    异步编程利用事件循环和非阻塞 i/o 来同时处理多个任务。事件循环持续监听来自不同来源的事件,并调用对应的回调函数进行处理。非阻塞 i/o 在后台进行输入或输出操作,让应用程序可以继续执...
    99+
    2024-05-08
    php 异步编程 并发请求
  • pthread_kill()vs pthread_cancel()终止为I/O阻塞的线程
    pthread_kill()函数用于向指定线程发送信号,而pthread_cancel()函数用于请求终止指定线程的执行。对于I/O...
    99+
    2023-09-26
    线程
  • 怎么理解I/O性能
    本篇内容主要讲解“怎么理解I/O性能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解I/O性能”吧!为了理解I/O性能,你必须要详细了解存储文件的存储层次...
    99+
    2024-04-02
  • Linux I/O调度器是什么
    这篇文章主要介绍Linux I/O调度器是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux I/O 调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。Linux I/O 系...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作