Python小白语法基础18(文件操作)

0) 参考文章

  • python超详细基础文件操作【建议收藏】_python程序设计基础+文件操作-CSDN博客
  • [Python学习篇] Python文件操作_python 写文件-CSDN博客
  • Python超详细基础文件操作(详解版)_python文件操作-CSDN博客

1) 前置知识(字符编码)

  • 在第三方软件上获取到的文件在本地渲染时,出现乱码,一定是字符编码不对
  • 默认使用utf8编码对文件内容进行解析
  • 但是有的文件内容使用gbk编码,与默认的解码方式不同因此形成的乱码
  • 方法: 编解码一致就行了
  • # (1) 字符串进行编码,得到新的数据类型:字节(bytes)
    s = "yuan"
    s = "昊"
    # ret = s.encode()  # 默认utf8
    ret = s.encode("gbk")  # b'\xea\xbb'
    print(ret)
    print(type(ret))  # <class 'bytes'># 补充:
    s2 = "yuan".encode()
    # s2 = b"yuan苑"  # b: 字节类型
    print(type(s2))  # <class 'bytes'># (2) 将字节串解码成字符串
    data = b'\xea\xbb'
    print(type(data))  # <class 'bytes'>
    # 解码 字节的内置方法:decode
    ret = data.decode("gbk")  # 默认utf8解码
    print(ret) # 昊# 字节应用: 磁盘存储,网络传输

2) 文件操作

  • 文件句柄
  • # 返回的是一个文件的操作句柄
    # window系统需要添加encoding="utf8"参数
    f = open("05 hello.txt", mode="r", encoding="utf8")# 读所有字符
    data = f.read()
    print(data)
  • 文件读操作
  • # 返回的是一个文件的操作句柄
    f = open("06 relax小诗",encoding="utf8")
    # (1) 读所有字符
    data = f.read()
    print(data)# 光标位置
    print(f.tell())# 调整光标位置
    f.seek(0)
    data = f.read()
    print(data)# (2) 读指定数量的字符
    data01 = f.read(6)
    print(data01)  # 打印六行字符
    f.seek(230)  # 偏移量 230个字符
    data01 = f.read(6)
    print(data01)# (3) 读一行
    line01 = f.readline()
    print(line01,end="")
    line01 = f.readline()
    print(line01,end="")
    line01 = f.readline()
    print(line01,end="")# (4) 读所有行
    lines = f.readlines()
    for line in lines:print(line,end="")# (5) 遍历文件
    for line in f:if len(line)>10:print(line, end="")
    
  • 文件写操作
  • f = open("09 hello2.txt", mode="w",encoding="utf8")# (1) f.write
    f.write("hello,苑昊!\n")
    f.write("hello,yuan!")# (2) f.writelines
    f.writelines(["aaa\n","bbb\n"])
    lines = open("06 relax小诗",encoding="utf8").readlines()
    f.writelines(lines)# (3) mode ="a" 追加:append
    f = open("09 hello2.txt", mode="a")
    f.write("hello,peach!\n")
  • 文件管理
  • # 版本1:
    f = open("09 hello2.txt",encoding="utf8")
    data = f.read()
    print(data)
    f.close()# 版本2:
    with open("09 hello2.txt",encoding="utf8") as f:data = f.read()print(data)
  • 字节操作
  • # (1) mode:rb
    with open("09 hello2.txt", "rb") as f:data = f.read()print(data)print(type(data)) # <class 'bytes'>print(data.decode())# (2) mode:wb
    # with open("12 微博图片 hello3.txt", "wb",encoding="gbk") as f:
    #     f.write("hello 中国!".encode("GBK"))

3) 实际应用

  • 图片下载
  • # 版本1:
    with open("卡通.jpg", "rb") as f_read:  # 读取图片二进制编码data = f_read.read()  # 变量持久存储with open("卡通2.jpg", "wb") as f_write: # 新文件写入读取的二进制编码f_write.write(data)  # 写入二进制# 版本2:
    with open("卡通3.jpg", "wb") as f_write:with open("卡通.jpg", "rb") as f_read:f_write.write(f_read.read())
  • 爬虫下载图片
  • import requests# 案例1
    # 爬虫
    res = requests.get("https://pic.netbian.com/uploads/allimg/240112/001654-17049898140369.jpg")
    # print(res.content)# 写文件
    with open("美女.jpg","wb") as f:f.write(res.content)# 案例2with open("美女2.jpg","wb") as f:f.write(res.content)
    

4)  openpyxl模块(写入excel表格)

  • import openpyxl# (1) 读取Excel文件
    # 打开指定的execl对象 读取默认工作簿
    workbook = openpyxl.load_workbook('example.xlsx')
    # 工作簿中创建一个工作表对象
    sheet = workbook['Sheet']# 获取单元格数据
    value = sheet['A1'].value
    print(value) # 获取对应工作簿的A1单元格 名字value = sheet['B2'].value
    print(value)  # 2023 / 爱尔兰 英国 美国 匈牙利 / 剧情 喜剧 爱情 科幻 / 欧格斯·兰斯莫斯 / 艾玛·斯通 马克·鲁弗洛sheet['A7'].value = "沈腾 飞驰人生1"
    # 保存修改后的Excel文件
    workbook.save('example.xlsx')# (2) 创建Excel并写数据
    # 创建新工作簿
    workbook = openpyxl.Workbook()# 获取默认工作表
    sheet = workbook.active# (1) 写入数据到单元格
    sheet['A1'] = 'Hello'
    sheet['B1'] = 'World'# (2) 写入一行数据
    sheet.append([1, 2, 3, 4, 5, 7])for i in range(1, 101):sheet.append([i, i ** 2, i ** 3, i ** 4])# 保存工作簿
    workbook.save('new_example.xlsx')

    5) 爬虫案例

  • import requests
    import openpyxlcookies = {'ll': '"108288"','bid': 'n1IbnM-UzkI','Hm_lvt_6d4a8cfea88fa457c3127e14fb5fabc2': '1698153214','_ga': 'GA1.2.1489184474.1698153214','_ga_Y4GN1R87RG': 'GS1.1.1698153214.1.0.1698153217.0.0.0','douban-fav-remind': '1','ap_v': '0,6.0','__utma': '30149280.947861648.1695648345.1708952551.1711004385.23','__utmz': '30149280.1711004385.23.4.utmcsr=douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/',
    }headers = {'Accept': 'application/json, text/plain, */*','Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'no-cache','Connection': 'keep-alive','Origin': 'https://movie.douban.com','Pragma': 'no-cache','Referer': 'https://movie.douban.com/explore','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36','sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"','sec-ch-ua-mobile': '?0','sec-ch-ua-platform': '"macOS"',
    }response = requests.get('https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=120&selected_categories=%7B%22%E7%B1%BB%E5%9E%8B%22:%22%E5%96%9C%E5%89%A7%22%7D&uncollect=false&tags=%E5%96%9C%E5%89%A7',cookies=cookies,headers=headers,
    )data = response.json().get("items")
    # print(data)movie_list = []for item in data:if item.get("type") == "movie":title = item.get("title")card_subtitle = item.get("card_subtitle")count = item.get("rating").get("count")value = item.get("rating").get("value")large_pic = item.get("pic").get("large")movie_list.append([title, card_subtitle, value, count, large_pic])print("movie_list:",movie_list)# 存储到excel表格:
    # 创建新工作簿
    workbook = openpyxl.Workbook()
    # 获取默认工作表
    sheet = workbook.active
    # 写入header
    sheet.append(["名字", "副标题", "评分", "评分人数", "海报"])
    # 写入数据for movie_item in movie_list:sheet.append(movie_item)# save: 保存路径 保存数据
    workbook.save('douban.xlsx')
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482212.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s调度器扩展(scheduler)

1.K8S调度器 筛选插件扩展 为了熟悉 K8S调度器扩展步骤&#xff0c;目前只修改 筛选 插件 准备环境&#xff08;到GitHub直接下载压缩包&#xff0c;然后解压&#xff0c;解压要在Linux系统下完成&#xff09; 2. 编写调度器插件代码 在 Kubernetes 源代码目录下编写调度插件…

领养我的宠物:SpringBoot开发指南

第2章 开发环境与技术 本章节对开发宠物领养系统需要搭建的开发环境&#xff0c;还有宠物领养系统开发中使用的编程技术等进行阐述。 2.1 Java语言 Java语言是当今为止依然在编程语言行业具有生命力的常青树之一。Java语言最原始的诞生&#xff0c;不仅仅是创造者感觉C语言在编…

Permute for Mac 媒体文件格式转换软件 安装教程【音视频图像文件转换,简单操作,轻松转换,提高效率】

Mac分享吧 文章目录 Permute for Mac 格式转换软件 效果图展示一、Permute 格式转换软件 Mac电脑版——v3.11.15⚠️注意事项&#xff1a;1️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件2.1 左侧安装包拖入右侧文件夹中&#xff0c;等待安装完成&#xff0c;运行软件2.2…

【Android】EventBus的使用及源码分析

文章目录 介绍优点基本用法线程模式POSTINGMAINMAIN_ORDEREDBACKGROUNDASYNC 黏性事件 源码注册getDefault()registerfindSubscriberMethods小结 postpostStickyunregister 介绍 优点 简化组件之间的通信 解耦事件发送者和接收者在 Activity、Fragment 和后台线程中表现良好避…

原子类、AtomicLong、AtomicReference、AtomicIntegerFieldUpdater、LongAdder

原子类 JDK提供的原子类&#xff0c;即Atomic*类有很多&#xff0c;大体可做如下分类&#xff1a; 形式类别举例Atomic*基本类型原子类AtomicInteger、AtomicLong、AtomicBooleanAtomic*Array数组类型原子类AtomicIntegerArray、AtomicLongArray、AtomicReferenceArrayAtomic…

【Electron学习笔记(三)】Electron的主进程和渲染进程

Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…

FFmpeg一些常用的命令

官网&#xff1a;https://ffmpeg.org/ 官网下载&#xff1a;https://ffmpeg.org/download.html 官网下载源码&#xff1a;https://www.ffmpeg.org/releases/ FFmpeg 实用命令 — FFmpeg 教程 文档 一、参数 1.1 FFmpeg 常用参数 参数说明备注-i filename指定输入文件&#…

JAVA篇08 —— String类

欢迎来到我的主页&#xff1a;【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助&#xff0c;希望点赞收藏加关注啦~ 目录 1 String概述 1.1 String特性 1.2 String常用方法 2 StringBuffer类 2.1 String与StringBuffer互转 2.2 Stri…

Flink四大基石之Time (时间语义) 的使用详解

目录 一、引言 二、Time 的分类及 EventTime 的重要性 Time 分类详述 EventTime 重要性凸显 三、Watermark 机制详解 核心原理 Watermark能解决什么问题,如何解决的? Watermark图解原理 举例 总结 多并行度的水印触发 Watermark代码演示 需求 代码演示&#xff…

LabVIEW将TXT文本转换为CSV格式(多行多列)

在LabVIEW中&#xff0c;将TXT格式的文本文件内容转换为Excel格式&#xff08;即CSV文件&#xff09;是一项常见的数据处理任务&#xff0c;适用于将以制表符、空格或其他分隔符分隔的数据格式化为可用于电子表格分析的形式。以下是将TXT文件转换为Excel&#xff08;CSV&#x…

CENet及多模态情感计算实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

共享售卖机语音芯片方案选型:WTN6020引领智能化交互新风尚

在共享经济蓬勃发展的今天&#xff0c;共享售卖机作为便捷购物的新形式&#xff0c;正逐步渗透到人们生活的各个角落。为了提升用户体验&#xff0c;增强设备的智能化和互动性&#xff0c;增加共享售卖机的语音功能就显得尤为重要。 共享售卖机语音方案选型&#xff1a; WTN602…

云备份实战项目

文章目录 前言一、整体项目简介二、服务端环境及功能简介三、 客户端环境及功能简介四、服务端文件管理类的实现1. 获取文件大小&#xff0c;最后一次修改时间&#xff0c;最后一次访问时间&#xff0c;文件名称&#xff0c;以及文件内容的读写等功能2. 判断文件是否存在&#…

【Linux】死锁、读写锁、自旋锁

文章目录 1. 死锁1.1 概念1.2 死锁形成的四个必要条件1.3 避免死锁 2. 读者写者问题与读写锁2.1 读者写者问题2.2 读写锁的使用2.3 读写策略 3. 自旋锁3.1 概念3.2 原理3.3 自旋锁的使用3.4 优点与缺点 1. 死锁 1.1 概念 死锁是指在⼀组进程中的各个进程均占有不会释放的资源…

通俗易懂:序列标注与命名实体识别(NER)概述及标注方法解析

目录 一、序列标注&#xff08;Sequence Tagging&#xff09;二、命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&#xff09;**命名实体识别的作用****命名实体识别的常见实体类别** &#xff1a; 三、标签类型四、序列标注的三种常见方法1. **BIO&#xf…

设计模式学习[10]---迪米特法则+外观模式

文章目录 前言1. 迪米特法则2. 外观模式2.1 原理阐述2.2 举例说明 总结 前言 之前有写到过 依赖倒置原则&#xff0c;这篇博客中涉及到的迪米特法则和外观模式更像是这个依赖倒置原则的一个拓展。 设计模式的原则嘛&#xff0c;总归还是高内聚低耦合&#xff0c;下面就来阐述…

JUnit介绍:单元测试

1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码&#xff08;Java 程序最小的功能单元是方法&#xff09;单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常&#xff1b; 如果修改了代码&#xff0c;只需要确保其对应的单元…

用Transformers和FastAPI快速搭建后端算法api

用Transformers和FastAPI快速搭建后端算法api 如果你对自然语言处理 (NLP, Natural Language Processing) 感兴趣&#xff0c;想要了解ChatGPT是怎么来的&#xff0c;想要搭建自己的聊天机器人&#xff0c;想要做分类、翻译、摘要等各种NLP任务&#xff0c;Huggingface的Trans…

架构师:Dubbo 服务请求失败处理的实践指南

1、简述 在分布式服务中,服务调用失败是不可避免的,可能由于网络抖动、服务不可用等原因导致。Dubbo 作为一款高性能的 RPC 框架,提供了多种机制来处理服务请求失败问题。本文将介绍如何在 Dubbo 中优雅地处理服务请求失败,并结合具体实践步骤进行讲解。 2、常见处理方式 …

shell语法(1)bash

shell是我们通过命令行与操作系统沟通的语言&#xff0c;是一种解释型语言 shell脚本可以直接在命令行中执行&#xff0c;也可以将一套逻辑组织成一个文件&#xff0c;方便复用 Linux系统中一般默认使用bash为脚本解释器 在Linux中创建一个.sh文件&#xff0c;例如vim test.sh…