【Python练习cookbook】文件操作,I/O

PTA天梯练习赛L1-016 查验身份证(Java) 题目: 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值: Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2 现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。 输入格式: 输入第一行给出正整数N(≤100)是 阅读详情

file对象使用:https://docs.python.org/zh-cn/3.7/library/io.html#module-io

关键函数:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

打开 file 并返回对应的 file object。如果该文件不能打开,则触发 OSError。

 

  • 从流中读取输入时,如果 newline 为 None,则启用通用换行模式。输入中的行可以以 '\n','\r' 或 '\r\n' 结尾,这些行被翻译成 '\n' 在返回呼叫者之前。如果它是 '',则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。

  • 将输出写入流时,如果 newline 为 None,则写入的任何 '\n' 字符都将转换为系统默认行分隔符 os.linesep。如果 newline 是 '' 或 '\n',则不进行翻译。如果 newline 是任何其他合法值,则写入的任何 '\n' 字符将被转换为给定的字符串。

errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 错误处理方案 ),但是使用 codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括:

  • 如果存在编码错误,'strict' 会引发 ValueError 异常。 默认值 None 具有相同的效果。

  • 'ignore' 忽略错误。请注意,忽略编码错误可能会导致数据丢失。

  • 'replace' 会将替换标记(例如 '?' )插入有错误数据的地方。

  • 'surrogateescape' 将表示任何不正确的字节作为Unicode专用区中的代码点,范围从U+DC80到U+DCFF。当在写入数据时使用 surrogateescape 错误处理程序时,这些私有代码点将被转回到相同的字节中。这对于处理未知编码的文件很有用。

  • 只有在写入文件时才支持 'xmlcharrefreplace'。编码不支持的字符将替换为相应的XML字符引用 &#nnn;。

  • 'backslashreplace' 用Python的反向转义序列替换格式错误的数据。

  • 'namereplace' (也只在编写时支持)用 \N{...} 转义序列替换不支持的字符。

 

# Read the entire file as a single string
with open('somefile.txt', 'rt') as f:
    data = f.read()

# Iterate over the lines of the file
with open('somefile.txt', 'rt') as f:
    for line in f:
    # process line
    # Write chunks of text data
with open('somefile.txt', 'wt') as f:
    f.write(text1)

# Redirected print statement
with open('somefile.txt', 'wt') as f:
    print(line1, file=f)

 read(),write()遵循上述输入输出规则处理换行符。print()结果重定向时,注意file必须是文本模式,二进制模式会报错。

1.print()函数修改分割符和结束符

>>> print('ACME', 50, 91.5)
ACME 50 91.5
>>> print('ACME', 50, 91.5, sep=',')
ACME,50,91.5
>>> print('ACME', 50, 91.5, sep=',', end='!!\n')
ACME,50,91.5!!

>>> for i in range(5):
... print(i, end=' ')
...
0 1 2 3 4 >>>

 设置sep参数比起用str.join转换输出的好处在于,str.join()只能对字符串生效,儿sep参数没有这种限制

2.file对象的read()函数

file.read([size])

从文件读取指定的字符数,如果未给定或为负则读取所有。

fileoper.txt文件如下:

1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.com
with open('D:\Program Data\PyCharmPython\deep_learning-master\DeepFM\script\\fileoper.txt','rb') as f:
    print(f.read(16))
        
output:b'1:www.runoob.com'

with open('D:\Program Data\PyCharmPython\deep_learning-master\DeepFM\script\\fileoper.txt','r') as f:
    print(f.read(16))
        
output:1:www.runoob.com

3.当文件不存在时,才写入

普通做法:

>>> import os
>>> if not os.path.exists('somefile'):
... with open('somefile', 'wt') as f:
... f.write('Hello\n')
... else:
... print('File already exists!')
...
File already exists!
>>>

 python3.0以后的可选做法:

>>> with open('somefile', 'wt') as f:
... f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
... f.write('Hello\n')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
>>>

4.模拟文件输入

使用io.StringIO() and io.BytesIO()

>>> s = io.StringIO()
>>> s.write('Hello World\n')
12
>>> print('This is a test', file=s)
15
>>> # Get all of the data written so far
>>> s.getvalue()
'Hello World\nThis is a test\n'
>>>
>>> # Wrap a file interface around an existing string
>>> s = io.StringIO('Hello\nWorld\n')
>>> s.read(4)
'Hell'
>>> s.read()
'o\nWorld\n'
>>>

>>> s = io.BytesIO()
>>> s.write(b'binary data')
>>> s.getvalue()
b'binary data'
>>>

5.打开.gz .bz2压缩文件

#读入
# gzip compression
import gzip
    with gzip.open('somefile.gz', 'rt') as f:
        text = f.read()
# bz2 compression
import bz2
    with bz2.open('somefile.bz2', 'rt') as f:
        text = f.read()
#写入
# gzip compression
import gzip
    with gzip.open('somefile.gz', 'wt') as f:
        f.write(text)
# bz2 compression
import bz2
    with bz2.open('somefile.bz2', 'wt') as f:
        f.write(text)

gzip和bz2模块生成的f具有和内置open()一样的参数。同时,gzip和bz2模块可以用在二进制打开的文件最上层,实现对多种文件型的操作

import gzip
    f = open('somefile.gz', 'rb')
    with gzip.open(f, 'rt') as g:
        text = g.read()

 6.循环读取固定大小文件

from functools import partial
    RECORD_SIZE = 32
    with open('somefile.data', 'rb') as f:
        records = iter(partial(f.read, RECORD_SIZE), b'')
    for r in records:
        ...

用到了 partial()生成callabe对象和iter()替代while循环

7.readinto()方法使用固定大小的buffer

import os.path
def read_into_buffer(filename):
    buf = bytearray(os.path.getsize(filename))
    with open(filename, 'rb') as f:
        f.readinto(buf)
    return buf
>>> # Write a sample file
>>> with open('sample.bin', 'wb') as f:
... f.write(b'Hello World')
...
>>> buf = read_into_buffer('sample.bin')
>>> buf
bytearray(b'Hello World')
>>> buf[0:5] = b'Hallo'
>>> buf
bytearray(b'Hallo World')
>>> with open('newsample.bin', 'wb') as f:
... f.write(buf)
...
11
>>>

readintor()方法会依次读取buf大小的内容到buf中,替换掉原有buf内容,这样不像read(size)那样每次开辟新的size大小内存。

注意:每次判断readinto()真实读取到的大小,可判断是否停止。

record_size = 32 # Size of each record (adjust value)
buf = bytearray(record_size)
with open('somefile', 'rb') as f:
    while True:
        n = f.readinto(buf)
        if n < record_size:
            break
         # Use the contents of buf
         ...

类似的into还有recv_into(), pack_into()等

Grep命令常见用法 使用Grep命令查找多个字符串 多模式 Grep 命令 grep 命令支持三种正则表达式语法:Basic、Extended 和 Perl-compatible 。当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式。 要搜索多个匹配模式,可以使用 OR ( alternation ) 运算符。我们可以用 OR 运算符 |( pipe )指定不同的匹配项,这些匹配项可以是文本字符串,也可以是表达式集。值得注意的是,在所有正则表达式运算符中,这个运算符的优先级是最低的。 使用 grep 命令 阅读详情

相关推荐

Linux操作系统:字符串处理及awk与sed

对文本进行逐行处理的编程语言,它来源于3个创作者的名字: Aho、(Peter)Weinberg和(Brain)Kernighan,与sed和grep很相似,awk是—种样式扫描与处理工具,但其功能却强于sed和grep。(1) a∶新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)(4) i∶插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)(6) s:取代,可以直接进行取代的工作,通常这个s的动作可以搭配正规表达式进行。(5) p∶打印,将某个选择的数据印出。...

m0_51456787的博客 2770

awk 匹配_Linux 三剑客之 awk 详解

(给Linux爱好者加星标,提升Linux技能)以下文章来源于宜信技术学院 ,作者秦伟第一篇 awk简介与表达式实例一种名字怪异的语言模式扫描和处理,处理数据和生成报告。awk不仅仅是linux系统中的一个命令,而且是一种编程语言;它可以用来处理数据和生成报告(excel);处理的数据可以是一个或多个文件;可以是直接来自标准输入,也可以通过管道获取标准输入;awk可以在命令行上直接编辑命...

weixin_39796868的博客 1058

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 464

awk 使用正则表达式提取关键字

未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk虽然很强大 但是有些高级功能还是非常少,需要手扣代码 写方法。如果不想安装 其他版本的awk 就只能自行手扣关键字搜索了。可以提取数字 浮点数 指定内容字符串 正则表达式可以自定义。awk 有3个不同版本: awk、nawk和gawk,ubuntu 自带的gawk 可以用的功能比较鸡肋。

sfgoidhodfgioji的博客 994

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 572

PSIM+PIL+CCS三剑客:手把手教你搞定DSP28335的软硬件联合调试

本文详细介绍了如何利用PSIM、PIL与CCS三款工具,实现DSP28335的软硬件联合调试。通过搭建兼容环境、从PSIM仿真生成PIL代码,再到实战联合调试与问题诊断,手把手指导开发者构建从虚拟模型到实际硬件的完整验证闭环,有效提升电力电子与电机驱动等领域的开发效率与可靠性。

weixin_29183637的博客 186

python cookbook源码_Python Cookbook目录

第1章 数据结构和算法 11.1 将序列分解为单独的变量 11.2 从任意长度的可迭代对象中分解元素 31.3 保存最后N个元素 51.4 找到最大或最小的N个元素 71.5 实现优先级队列 91.6 在字典中将键映射到多个值上 111.7 让字典保持有序 131.8 与字典有关的计算问题 141.9 在两个字典中寻找相同点 151.10 从序列中移除重复项且保持元素间顺序不变 171.11 对切...

weixin_28929201的博客 441

(南京观海微电子)——TCON介绍

TCON又称:逻辑板,控制板,在液晶电视里的作用和CRT中的视放板相当,但有本质的区别,逻辑板不是一个纯粹的信号放大器,它输入是LVDS格式信号,而不是RGB。逻辑板的作用是把数字板送来的LVDS或TTL图像数据信号,时钟信号进行处理移位寄存器存储将图像数据信号,时钟信号转换成屏能够识别的控制信号行列信号RSDS控制屏内的MOSFET管工作而控制液晶分子的扭曲度。目前国内主要的TCON板生产商有视显光电。传统TCON的布局主要分为以下两种:X+C分离式和X+C一体式。

m0_75095200的博客 3834

Python输入输出五层进阶:从基础到异步I/O实战

输入输出(I/O)是编程语言的核心功能之一,Python通过简洁的语法和丰富的库支持实现了强大的I/O能力。从基础的print/input函数到文件操作、编码处理,再到性能优化和异步编程,Python的I/O系统形成了完整的知识体系。理解缓冲机制、掌握编码转换、合理使用上下文管理器等技术点,可以显著提升数据处理效率和程序健壮性。在实际开发中,这些技术广泛应用于日志处理、网络通信、大数据分析等场景,特别是结合asyncio的异步I/O,能够有效解决高并发环境下的性能瓶颈问题。通过系统学习Python I/O的

weixin_30902251的博客 397

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

FFmpeg视频缩放终极指南:从基础命令到保持宽高比的5种实战技巧

本文是FFmpeg视频缩放的终极指南,详细讲解了从基础命令到保持宽高比的5种实战技巧。针对不同平台(如抖音、B站、Instagram)的分辨率要求,提供了具体的参数模板和批量处理脚本,帮助内容创作者高效、精准地调整视频大小,避免画面变形或黑边问题,实现多平台适配。

juice的博客 457

python cookbook 在线-《Python Cookbook》第三版中文版

人生苦短,我用 python!我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。最近看到一本《Python Cookbook》3rd Edition,完全基于python3,写的也很不错。 ...

weixin_39950081的博客 304

SpringBoot DDoS防护:限流与验证全面指南

SpringBoot应用DDoS防护摘要 本文介绍了SpringBoot应用防护DDoS攻击的方案。DDoS攻击通过分布式请求耗尽服务器资源,导致服务不可用、成本激增等风险。防护需遵循分层防御、弹性设计等原则。 核心方案包括: 令牌桶限流:使用Guava RateLimiter控制请求速率 滑动窗口算法:通过Redis+Lua实现精确的分布式限流 微服务集成:利用Spring Cloud Gateway统一管理API限流 实施建议: 关键接口默认添加限流保护 监控系统实时警报异常流量 结合WAF等多层防护措

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2487

python cookbook是什么_《python cookbook》怎么样

一直认为 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。《Python Cookbook》3rd Edition,完全基于python3,写的也很不错。本书介绍了应用在各个领域的技巧和方法,涵盖了很多高...

weixin_39738273的博客 367

4 屏 + 8 摄像头一开,谁在悄悄拖慢你的座舱域控?

如果你觉得座舱卡顿:❌ 别第一反应怪 SoC❌ 别盲目堆算力。

weixin_43199439的博客 148

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python cookbook阅读之——5. 文件和I/O

5.1 读写文本数据

cocos2dGirl的专栏 319

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python Cookbook读书笔记

Python Cookbook读书笔记

pku_langzi的博客 1646

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python Cookbook 第三版中文v3.0.0

Python Cookbook 第三版中文v3.0.0 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到Python Cookbook第三版中文版的下载仓库!本资源文件为您提供了Python编程语言的实用技巧和最佳实践,助您更加高效地掌握Python开发。 本版本经过精心翻译和校对,内容丰富,涵盖了Python编程的各个方面,包括但不限于: 数据结构与算法 字符串与文本...

gitblog_06772的博客 286

python cookbook pdf百度网盘_Python Data Analysis Cookbook by Ivan Idris

杂志简介:Data analysis is a rapidly evolving field and Python is a multi-paradigm programming language suitable for object-oriented application development and functional design patterns. As Python offers...

weixin_39635130的博客 1620

python cookbook 中文在线_Python Cookbook(第3版)中文版

内容提要O’Reilly Media, Inc. 介绍关于作者前言第1章 数据结构和算法1.1 将序列分解为单独的变量1.1.1 问题1.1.2 解决方案1.1.3 讨论1.2 从任意长度的可迭代对象中分解元素1.2.1 问题1.2.2 解决方案1.2.3 讨论1.3 保存最后N个元素1.3.1 问题1.3.2 解决方案1.3.3 讨论1.4 找到最大或最小的N个元素1.4.1 问题1.4.2 解...

weixin_39555320的博客 1242

《Python Cookbook》第3版(作者:David Beazley 和 Brian K. Jones)是一本深入探讨 Python 编程技巧和最佳实践的经典书籍,适合中高级 Python 开发

概述:本章聚焦 Python 的内置数据结构(如列表、字典、集合)和常见算法,介绍高效处理数据的方法。概述:本章聚焦数据序列化(如 CSV、JSON、XML)和编码问题。本章总结:字符串处理是 Python 的强项,本章配方适合文本清洗、日志解析和国际化应用。本章总结:本章配方是数据交换和存储的基础,适合 Web 开发和数据分析。本章总结:生成器是处理大数据和复杂迭代的关键,适合流式处理和内存优化场景。本章总结:本章配方适合构建健壮的类结构,dataclasses 和描述符是现代 Python 的亮点。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 795

python cookbook笔记

1,数据结构和算法 1.1,元组拆包 1.2,元组拆包*args 1.3,collections.deque:队列,保留最后几个元素 1.4,heapq.nlargest(),heapq.nsmallest():最大,最小几个元素 1.5,heapq.heappush(),heapq.heappop():优先级队列 1.6,collections.defaultdict:一键...

dirac1993的专栏 315

python cookbook 中文在线_《Python Cookbook》第三版中文版

软件简介人生苦短,我用 python!我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的,而且python3的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。最近看到一本《Python Cookbook》3rd Edition,完全基于python3,写的也很不...

weixin_39792803的博客 552

python cookbook 中文版 第 3 版-《Python Cookbook》第三版中文版

人生苦短,我用 python!我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。最近看到一本《Python Cookbook》3rd Edition,完全基于python3,写的也很不错。 ...

weixin_37988176的博客 1454

cookbook1-10章学习

1、python cookbook学习 原文:https://python3-cookbook.readthedocs.io/zh_CN/latest/ 一、数据结构和算法 去除序列中出现的重复元素,保持剩下的元素顺序不变 def dedupe(items): seen = set() for item in items: if item not in se...

weixin_43787875的博客 212

python 3 cookbook_《Python Cookbook》第三版中文版

人生苦短,我用 python!我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是2.x系列的,专门基于3.x系列的书籍少的可怜。最近看到一本《Python Cookbook》3rd Edition,完全基于python3,写的也很不错。 ...

weixin_39606003的博客 237
上一篇: 【Python练习cookbook】迭代器、生成器
下一篇: Floyd判环算法(龟兔赛跑算法),一定会相遇吗?
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值