Python文件处理(IO 技术)-2

简介: Python文件处理(IO 技术)

Python文件处理(IO 技术)-1

https://developer.aliyun.com/article/1537870


五、文件对象的常用属性和方法

文件对象的属性
属性 说明
name 返回文件的名字
mode 返回文件的打开模式
closed 若文件被关闭则返回 True


文件对象的打开模式

文件对象的常用方法

六、文件任意位置操作

【示例】 seek()移动文件指针示例

with open('中文乱码.txt', 'r', encoding='utf-8') as f:
    print('文件名:{0}'.format(f.name))
    print(f.tell())
    print('读取的内容:{0}'.format(str(f.readline())))
    print(f.tell())
    f.seek(0, 0)
    print('读取的内容:{0}'.format(str(f.readline())))

运行结果:

七、CSV 文件的操作

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。

与 Excel 文件不同,CSV 文件中:

  • 值没有类型,所有值都是字符串
  • 不能指定字体颜色等样式
  • 不能指定单元格的宽高,不能合并单元格
  • 没有多个工作表
  • 不能嵌入图像图表

Python 标准库的模块 csv 提供了读取和写入 csv 格式文件的对象。


1. csv.reader 对象和 csv 文件读取

【示例】 csv.reader 对象于从 csv 文件读取数据

import csv
with open('豆瓣.csv', 'r', encoding='utf-8') as f:
    read = csv.reader(f)
    for row in read:
        print(row)

运行结果:

csv.writer 对象和 csv 文件写入

【示例】 csv.writer 对象写一个 csv 文件

import csv
headers = ['标题', '类型', '评分', '引言']
rows = [('当幸福来敲门', '剧情 传记 家庭', 9.2, '平民励志片。'),
        ('寻梦环游记', '喜剧 动画 奇幻 音乐', 9.1, '死亡不是真的逝去,遗忘才是永恒的消亡。'),
        ('末代皇帝', '剧情 传记 历史', 9.3, '“不要跟我比惨,我比你更惨”再适合这部电影不过了。')]
with open('豆瓣.csv', 'w', encoding='utf-8', newline='') as f:
    write = csv.writer(f)
    write.writerow(headers)
    write.writerows(rows)

运行结果:

pickle 序列化

Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。 对象的序列化机制广泛的应用在分布式、并行系统上。

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。

【示例】 将对象序列化到文件中

import pickle
with open(r"data.dat", "wb") as f:
    a1 = ['ZX', [123], {'age': 18}]
    pickle.dump(a1, f)

【示例】 将获得的数据反序列化成对象

import pickle
with open('data.dat', 'rb') as f:
    a = pickle.load(f)
print(a)

运行结果:

os 和 os.path 模块

os 模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。

os 模块-调用操作系统命令

os.system 可以帮助我们直接调用系统的命令

【示例】 os.system 调用 windows 系统的记事本程序

import os
os.system('cmd')
os.system('regedit')

【示例】 os.system 调用 windows 系统中 ping 命令

import os
os.system("ping www.baidu.com")

运行结果:

os.startfile:直接调用可执行文件

【示例】 运行安装好的微信

import os
os.startfile('D:\软件\微信\WeChat\WeChat.exe')

运行结果:

os 模块-文件和目录操作

os 模块下常用操作文件的方法

os 模块下关于目录操作的相关方法

【示例】 os 模块:创建、删除目录、获取文件信息等

import os
# 获取文件和文件夹相关的信息
print(os.name)  # windows->nt; linux 和 unix->posix
print(os.sep)  # windows->\; linux 和 unix->/
print(repr(os.linesep))  # windows->\r\n;linux-->\n\
print(os.stat('os模块-文件和目录操作.py'))

# 关于工作目录的操作
print(os.getcwd())  # 返回当前工作目录
# os.chdir('d:')  # 改变当前的工作目录为:d:盘根目录

# 创建目录、创建多级目录、删除
os.mkdir('电影')  # 创建目录
os.makedirs('音乐/周杰伦/稻香')  # 创建多级目录
os.makedirs('../电影1')  # ../表示上一级

print(os.listdir('电影'))
os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作。

方法 描述
isabs(path) 判断 path 是否绝对路径
isdir(path) 判断 path 是否为目录
isfile(path) 判断 path 是否为文件
exists(path) 判断指定路径的文件是否存在
getsize(filename) 返回文件的大小
abspath(path) 返回绝对路径
dirname§ 返回目录的路径
getatime(filename) 返回文件的最后访问时间
getmtime(filename) 返回文件的最后修改时间
walk(top,func,arg) 递归方式遍历目录
join(path,*paths) 连接多个 path
split(path) 对路径进行分割,以列表形式返回
splitext(path) 从路径中分割文件的扩展名


【示例】 测试 os.path 中常用方法

import os.path
# 是否为绝对路径
print(os.path.isabs('d:/a1.txt'))
# 是否为目录
print(os.path.isdir('d:/a1.txt'))
# 是否为文件
print(os.path.isfile('d:/a1.txt'))
# 文件是否存在
print(os.path.exists('d:/a1.txt'))
# 文件大小
print(os.path.getsize('d:/a1.txt'))
# 输出所在目录
print(os.path.dirname('d:/a1.txt'))
# 返回创建时间
print(os.path.getctime('d:/a1.txt'))
# 返回最后访问时间
print(os.path.getatime('d:/a1.txt'))
# 返回最后修改时间
print(os.path.getmtime('d:/a1.txt'))
# 输出绝对路径
print(os.path.abspath('d:/a1.txt'))
# 返回元组:目录、文件
print(os.path.split('d:/a1.txt'))
# 返回元组:路径、扩展名
print(os.path.splitext('d:/a1.txt'))
# 路径连接
print(os.path.join('d: ', 'python', 'a.txt'))

运行结果:

【示例】 列出指定目录下所有的.py 文件,并输出文件名

# 方法一
import os.path
path = os.getcwd()
file_list = os.listdir(path)
for filename in file_list:
    if filename.endswith('py'):
        print(filename)

# 方法二
import os.path
path = os.getcwd()
file_list = os.listdir(path)
filename = [filename for filename in file_list if filename.endswith('py')]
for f in filename:
    print(f)

walk()递归遍历所有文件和目录

os.walk()方法:

返回一个 3 个元素的元组,(dirpath, dirnames, filenames),

  • dirpath:要列出指定目录的路径
  • dirnames:目录下的所有文件夹
  • filenames:目录下的所有文件

【示例】 使用 walk()递归遍历所有文件和目录

import os

all_files = []
path = os.getcwd()
list_files = os.walk(path)
for dirpath, dirnames, filenames in list_files:
    for dir in dirnames:
        all_files.append(os.path.join(dirpath, dir))
    for name in filenames:
        all_files.append(os.path.join(dirpath, name))
# 打印子目录和子文件
for file in all_files:
    print(file)

运行结果:

shutil 模块(拷贝和压缩)

shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些 os 模块都没有提供。


【示例】 实现文件的拷贝

import shutil
# copy 文件内容
shutil.copy('1.txt', '1_copy.txt')

【示例】 实现递归的拷贝文件夹内容(使用 shutil 模块)

import shutil
#"音乐"文件夹不存在才能用。
shutil.copytree("电影/学习","音乐",ignore=shutil.ignore_patterns("*.html","*.htm"))

【示例】 实现将文件夹所有内容压缩

import shutil
# 将"电影/学习"文件夹下所有内容压缩到"音乐 2"文件夹下生成 movie.zip
# shutil.make_archive("音乐 2/movie", "zip", "电影/学习")


# 压缩:将指定的多个文件压缩到一个 zip 文件
import zipfile
z = zipfile.ZipFile("a.zip","w")
z.write("1.txt")
z.write("2.txt")
z.close()

运行结果:

【示例】 实现将压缩包解压缩到指定文件夹

import zipfile
# 解压缩:
z2 = zipfile.ZipFile("a.zip", "r")
z2.extractall("d:/")  # 设置解压的地址
z2.close()

运行结果:

递归算法

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

递归结构包括两个部分:

  • 定义递归头。
  • 递归体。

【示例】 使用递归求 n!

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)
a = factorial(5)
print(a)

运行结果:

【示例】 使用递归算法遍历目录下所有文件

import os
allfile = []

def getFiles(path, level):
    childFiles = os.listdir(path)
    for file in childFiles:
        filepath = os.path.join(path, file)
        if os.path.isdir(filepath):
            getFiles(filepath, level + 1)
        allfile.append("\t" * level + filepath)

getFiles(os.getcwd(), 0)
for f in reversed(allfile):
    print(f)

运行结果:

相关文章
|
8天前
|
数据管理 Python 内存技术
python WAV音频文件处理—— (2)处理PCM音频-- waveio包
python WAV音频文件处理—— (2)处理PCM音频-- waveio包
35 15
|
8天前
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
38 14
|
8天前
|
数据可视化 Python
python WAV音频文件处理——(3)高效处理大型 WAV 文件
python WAV音频文件处理——(3)高效处理大型 WAV 文件
36 9
|
8天前
|
存储 编解码 Linux
Python文件处理(IO 技术)-1
Python文件处理(IO 技术)
|
10天前
|
Python
并发编程,Python让你轻松驾驭多线程与异步IO!
【6月更文挑战第12天】本文探讨了Python中的并发编程,包括多线程和异步IO。通过`threading`模块展示了多线程编程,创建并运行多个线程以并发执行任务。同时,使用`asyncio`库演示了异步IO编程,允许在单线程中高效处理多个IO操作。两个示例代码详细解释了如何在Python中实现并发,展现了其在提升程序性能和响应速度方面的潜力。
|
3天前
|
数据采集 前端开发 JavaScript
Python爬虫技术:动态JavaScript加载音频的解析
Python爬虫技术:动态JavaScript加载音频的解析
|
18天前
|
Java
io读两个文件,生成list 排重后写本地文件(Java)
io读两个文件,生成list 排重后写本地文件(Java)
|
22天前
|
存储 Java API
Java语言IO(输入/输出)编程技术深度解析
Java语言IO(输入/输出)编程技术深度解析
252 1
|
26天前
|
存储 Java API
Java IO流
Java IO流
28 2
|
29天前
|
存储 Java
Java IO流:深入解析与技术应用
Java IO流:深入解析与技术应用
264 1

热门文章

最新文章