1. 基本数据结构

1.1. bytes和bytearray

  • bytes是一个数据结构类,是描述字节流序列对象,内存分配是连续的,是不可变类型。
  • bytearray是一个数据结构类,是描述字节流序列对象,内存分配是连续的,是可变类型。
    bytes类型与bytearray类型可以相互转换。
>>> b=b'abc'
>>> type(b)
<class 'bytes'>
>>> b=b"abc"
>>> type(b)
<class 'bytes'>
>>>content = bytes([1, 2, 3, 4])
>>> content
b'\x01\x02\x03\x04'
>>> type(content)
<class 'bytes'>
bytearray(b'\x01\x02\x03\x04')
>>> print(content)
bytearray(b'\x01\x02\x03\x04')
>>> content[1]=5
>>> content
bytearray(b'\x01\x05\x03\x04')
>>> content_array = bytearray(content)
>>> type(content_array)
<class 'bytearray'>
>>> content = bytes(content_array)
>>> type(content)
<class 'bytes'>

1.2. str和list

  • str是字符串类,可以直接通过’和“来创建,str是字符流对象,内存是连续的,str是不可变类型。
  • list是列表类,可以用[]来创建,其内存分配是不连续的,是可变类型。
>>> nums=['ww','22','2s']
>>> nums
['ww', '22', '2s']
>>> type(nums)
<class 'list'>
>>> name = "mike"
>>> type(name)
<class 'str'>
>>> name
'mike'
  • str到list
>>> name_list = list(name)
>>> name_list
['m', 'i', 'k', 'e']
  • list到str
>>> nums = [1, 2, 3, 4]
>>> nums_list = [str(x) for x in nums]
>>> nums_list
['1', '2', '3', '4']
>>> str().join(str_nums)
'1234'

1.3. str和bytes比较

str和bytes都是不可变类型,并且都是连续内存。虽然它们的结构是相同的,甚至存储的数据也可以完全一样,但是str是字符流,表现形式是字符串,而bytes是字节流,表现形式是数字序列。encode和decode默认是以utf-8编码来进行转换的,可以指定gbk编码。

>>> name = "mike"
>>> name_bytes = name.encode()
>>> name_bytes
b'mike'
>>> name = name_bytes.decode()
>>> name
'mike'
>>> text = "我是谁"
>>> text.encode('gbk')
b'\xce\xd2\xca\xc7\xcb\xad'
>>> text.encode('gbk')
b'\xce\xd2\xca\xc7\xcb\xad'
>>> text_bytes = text.encode('gbk')
>>> text_bytes
b'\xce\xd2\xca\xc7\xcb\xad'
>>> new_text = text_bytes.decode('gbk')
>>> new_text
'我是谁'

2. 数字与字符串的相互转换

2.1. 数字转换为字符串

数字转换为字符串主要是通过str类的成员函数format或f字符串语法来完成。

>>> name = 'Peter'
>>> age = 23
>>> print('{} is {} years old'.format(name, age))
Peter is 23 years old
>>> print(f'{name} is {age} years old')
Peter is 23 years old
>>> a = 123.456
>>> f"a if {a:8.2f}"
'a if   123.46'

2.2. 字符串转换为数字

  • str到int
>>> phone_number = "13988888888"
>>> int(phone_number, 10)
13988888888
>>> int(phone_number)
13988888888
>>> hex_str = "0x1234"
>>> int(hex_str, 16)
4660

3. 文件操作

3.1. 创建删除文件

  • 创建文件
os.mknod("test.txt")
open("test.txt", w)
  • 创建目录
# 创建单目录
os.mkdir("test")
# 创建多层目录
os.makedirs(r"d:\abc\def")
# pathlib创建目录
pathlib.Path("temp/").mkdir(parents=True, exist_ok=True)
  • 删除文件
os.remove("test.txt")
  • 删除空文件夹
os.removedirs("test")
os.rmdir("test")
  • 删除文件夹及其中文件
import shutil
shutil.rmtree('/path/to/your/dir/')

3.2. 遍历所有文件及目录

  • 遍历所有目录
>>> import pathlib
>>> p = pathlib.Path('.')
>>> [x for x in p.iterdir() if x.is_dir()]
  • 遍历所有文件
files = pathlib.Path(".").rglob("*.py")
for file in files:print(file)
  • 遍历所有文件及目录
p = pathlib.Path('.')
[print(x) for x in p.iterdir()]

3.3. 读写文件

  • 二进制读写文件
with open("scan.bin", "rb+") as bin_file:content = bin_file.read()content_array = bytearray(content)content_array[2] = 5with open("new.bin", "wb") as new_file:new_file.write(content_array)
  • 文本读写文件
# utf-8编码
with open("test6.py", "r", encoding='utf-8') as file:text = file.read()print(text)
# gbk编码
with open("a.c", "r", encoding='gb18030') as file:text = file.read()print(text)
  • pathlib读写
>>> import pathlib
>>> p = pathlib.Path('a.bin')
>>> p.write_bytes(b'Binary file contents')
20
>>> p.read_bytes()
b'Binary file contents'
>>> p = pathlib.Path('my_text_file.txt')
>>> p.write_text('Text file contents')
18
>>> p.read_text()
'Text file contents'
  • 按行读取
with open("test6.py", "r", encoding='utf-8') as file:print(file.readline()) # 读取第1行print(file.readline()) # 读取第2行# 遍历输出所有文本
with open("test6.py", "r", encoding='utf-8') as file:lines = file.readlines()[print(line) for line in lines]

4. 应用

4.1. 2进制文件转换为C代码数组。

#coding=utf-8
import syslines = []
lines.append("#pragma once\n")
lines.append("\n")
lines.append("const static char binArr[] = {\n")with open(sys.argv[1], "rb") as bin_file:content = bin_file.read()size = len(content)per_line_size = 16for n in range(0, size):if (0 == n%per_line_size):line = ["    "]if (n == size-1):line.append(f"0x{content[n]:02x}")lines.extend(line)else:line.append(f"0x{content[n]:02x}, ")if (15 == n % per_line_size):line.append("\n")lines.extend(line)line.clear()with open(sys.argv[2], "w") as file:lines.append("};\n");file.writelines(lines)

效果如下图:

Python编程之文件操作相关推荐

  1. Python编程--解压缩文件

    Python编程–解压缩文件 基于Python内置的shutil模块可以实现对压缩文件的操作. import shutil# 1. 压缩文件 """ # base_nam ...

  2. python 对 yaml 文件操作

    python 对 yaml 文件操作 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : p ...

  3. Python实现tab文件操作

    Python实现tab文件操作 # -*- coding:gbk -*- import os class TABFILE:     def __init__(self, filename, dest_ ...

  4. python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...

    这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...

  5. python怎么读取文件-python怎么读写文件操作

    本节内容:I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input/ ...

  6. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  7. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  8. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

  9. Python os模块文件操作(一)

    Python os模块文件操作(一) 一.文件描述符 在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符. 操作系统为了高效管理已经被打开的文件, ...

最新文章

  1. 公司GitHub被封号,只因员工在伊朗开电脑,官方:将撤销被美制裁国家限制
  2. joomla3.6.5 nginx下 前台页面404错误
  3. HIbernate实现增、删、改、查。
  4. PP模块入门考试试题,看看能得多少分吧!
  5. 台式计算机打不了蜂鸣,电脑主机启动不了,开机蜂鸣器也不响,主板指示灯
  6. css expressionr,CSS Expression讲解
  7. [HNOI2016] 序列(线段树 + 莫队 + 倍增)
  8. 程序员,该注意下啦!
  9. clickhouse数据字典
  10. python安装sqlalchemy-Python流行ORM框架sqlalchemy安装与使用教程
  11. Tableau系列软件概况
  12. [海森推荐] 人工智能:一种现代方法
  13. HCIP-RS H12-221-题库包含答案 1-50题(不定期更新剩余题目)
  14. 心电信号去噪算法归纳
  15. 解决SublimeText中文注释乱码
  16. Could not clean server of obsolete
  17. 深入理解Android相机体系结构
  18. Carson带你Android面试:Android语言篇 (附答案)
  19. php夜间,php实现自动开启/关闭夜间模式
  20. 区块链技术最佳的监管方式是智能合约监管智能合约

热门文章

  1. 大型电商实战项目,助力2021年高薪
  2. 与AWS、Azure合作的“公共云之友”Commvault,如今牵手阿里云
  3. geoserver热图
  4. 由于不能验证所收到的数据是否可信,无法显示您想要查看的页面。建议向此网站的管理员反馈这个问题。
  5. 启英泰伦离线语音+蓝牙+小程序控制方案介绍
  6. Vue入门(个人理解)
  7. 最新研究表明人类的智力正在退化
  8. 《算法导论(原书第3版)》pdf
  9. 服务器防火墙 配置端口号
  10. SQL 实验项目8_事务控制