Python文件处理

101 阅读6分钟

python笔记

第13章 文件处理

文件处理主要分为文件的读取和写入操作,不同的文件类型有不一样的处理方式,普通文件的读写操作可以使用内置函数open()实现,但一些较为特殊的文件的读写操作需要特定的模块或包。本章将会讲述Python如何读取文件的目录和路径、使用open()读写TXT文件、使用configparser读写配置文件、使用csv读写CSV文件、使用xlrd和xlwt读写Excel文件、使用python-docx读写Word文件。

13.1 使用os模块处理文件与目录

当我们在读写系统中某个文件的时候,必须找到文件所在路径才能读取文件,否则程序无法找到目标文件。Python的os模块为我们提供了查找目录中所有文件的方法。查看os模块的帮助文档,文档里面详细讲述了模块相关函数和使用方法,查看方法如下:

import os
help (os)
# os.getcwd():查看当前运行环境所在的路径信息
import os
print(os.getcwd())
# os.walk():获取目录下所有的目录和文件夹信息
for root, dirs, files in os.walk(r"C:\xy\html"):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))
# os.chdir():将当前路径切换到某个指定路径
print('切换前:', os.getcwd())
os.chdir(r'C:\Users\Administrator\Downloads')
print('切换后:', os.getcwd())
# os.curdir:返回当前目录的名称
print(os.curdir)
# os.pardir:返回当前目录的父目录的名称
print(os.pardir)
# os.makedirs():生成一个多层递归目录
os.makedirs(r'D:\xy\htmls')
# os.removedirs():目录为空,删除并返回上级目录,如果上级目录也为空,就执行同样的操作,以此类推
os.removedirs(r'D:\xy\htmls')
# os.mkdir():创建一个目录
os.mkdir(r'D:\xy\htmls')
# os.rmdir():删除某个目录,若目录不为空,则无法删除并提示异常
os.rmdir(r'D:\xy\htmls')
# os.listdir():显示指定目录下所有的文件和子目录,包括隐藏文件
dirs = os.listdir(r'D:\xy\html')
print(dirs)
# os.remove():删除文件,不能删除文件夹
os.remove(r'D:\xy\html\aa.txt')
# os.stat():获取文件/目录信息,并获取到文件的大小
info = os.stat(r'C:\xy\html\aa.txt')
print(info)
# os.sep:输出操作系统特定的路径分隔符,如Windows为\\,Linux为/
s = os.sep
print(s)
# os.pathsep:输出用于分隔文件路径的字符串
print(os.pathsep)
# os.system():运行Shell命令
print(os.system('ipconfig'))
# os.environ:获取操作系统的环境变量
print(os.environ)
# os.path.split(path):将参数path分隔,以元组返回
print(os.path.split(r'C:\xy\html'))
# os.path.abspath(path):返回参数path的绝对路径
print(os.path.abspath(r'xy\html'))
# os.path.dirname(path):返回参数path的上一级目录
print(os.path.dirname(r'D:\xy\html'))
# os.path.basename(path):返回参数path最后的目录或文件的名称
print(os.path.basename(r'D:\xy\html'))
# os.path.exists(path):判断参数path是否存在,若存在则返回True,若不存在则返回False
print(os.path.exists('/test/123/abc'))
# os.path.isabs(path):判断参数path是否为绝对路径,如果是就返回True
print(os.path.isabs(r'D:\xy\html'))
# os.path.isfile(path):判断参数path是否为文件,如果是就返回True,否则返回False
print(os.path.isfile(r'D:\xy\html'))
# os.path.isdir(path):判断参数path是否存在,如果是就返回True,否则返回False
print(os.path.isdir(r'D:\xy\html'))
# os.path.join(path1,[path2],[path3]):将路径和文件名拼接
print(os.path.join(r'D:\xy\html', 'aa.txt'))
# os.path.getatime(path):返回参数path所指向的文件或者目录的最后存取时间
print(os.path.getatime(r'D:\xy\html'))
# os.path.getmtime(time):返回参数path所指向的文件或者目录的最后修改时间
print(os.path.getmtime(r'D:\xy\html'))
# os.popen():以临时文件的方式执行Shell命名
f = os.popen(r"ipconfig", "r")
print(f.read())
f.close()

13.2 使用open()读写TXT文件

Python读写TXT文件可以使用内置函数open()实现。内置函数open()支持大部分文本文件的读写,TXT文件是其中之一,详细的读写方法如下:

f = open('test.txt', 'w', encoding='utf-8')
f.write('This is Python')
f.close()

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

内置函数open()设置了1个必选参数和6个可选参数,每个参数的说明如下:

(1)file:必选参数,代表文件路径(相对路径或者绝对路径)。

(2)mode:可选参数,文件打开模式。只读、只写和读写,参数mode的值对应r、w和a

(3)buffering:设置缓冲。

(4)encoding:设置编码格式,一般使用UTF8。

(5)errors:报错信息。

(6)newline:区分换行符。

(7)closefd:读写完成后是否关闭文件,默认值为True。

# --------------以字符串格式的数据写入文件--------------
f = open('test.txt', 'w', encoding='utf-8', newline='')
# writable()用于判断当前打开的文件是否为可写模式
print(f.writable())
# write()是写入一行数据,写入内容必须为字符串
f.write('This is Python')
# 写入换行符,让内容在新的一行写入,必须将参数newline设为空,否则数据之间存在空白行
f.write('\r\n')
# writelines()的写入内容可以是字符串或者多个字符串组成的列表
f.writelines(['name', 'age'])
f.close()
# --------------以二进制格式的数据写入文件--------------
f = open('test.txt', 'wb')
# 适用方法:writable()、write()和writelines()
f.write('This is Django'.encode('utf-8'))
f.close()
#----------------以字符串格式的数据读取文件--------------
f = open('test.txt', 'r', encoding='utf-8')
# readable()用于判断当前打开的文件是否为可读模式
print(f.readable())
# read()是读取文件全部内容
print(f.read())
# readline()是每次读取一行内容,如果要读取全部数据,就需要结合while循环
while 1:
    # 输出每一行数据
    v = f.readline()
    print(v)
    # 判断读取的数据是否为空,若为空,则代表已读取所有数据
    if not v:
       break
# writelines()读取整个文件所有行,保存在一个列表中,每行数据作为一个元素
print(f.readlines())
f.close()
# ----------------以二进制格式的数据读取文件----------------
f = open('test.txt', 'rb')
# 适用方法:readable()、read()、readline()和readlines()
# read()是读取文件全部内容
print(f.read())
f.close()
# ----------------以字符串格式的数据追加并读写文件----------------
f = open('test.txt', 'a+', encoding='utf-8', newline='')
# 适用方法:writable()、write()和writelines()
# write()是写入一行数据,写入内容必须为字符串
f.write('This is Python')
# 适用方法:readable()、read()、readline()和readlines()
# 但是a+模式打开的文件指针在文件结尾处,所以直接读是读不到内容的
print(f.read())
# 关闭文件
f.close()
# ----------------使用with…as…语句读写文件----------------
with open('test.txt', 'w') as f:
    # 调用closed属性查看文件是否已关闭
    print('文件是否已关闭', f.closed)
    f.write('This is Python')
# 调用closed属性查看文件是否已关闭
print('文件是否已关闭', f.closed)

13.3 使用configparser读写配置文件

在计算机科学领域,配置文件(Configuration File)是一种计算机文件,可以为一些计算机程序配置参数和初始设置。常用的配置文件后缀名分别有.ini、.conf、.config、.xml、.yaml等,Python的内置模块configparse支持读写CONF和INI类型的文件,本书将以INI类型的文件为例进行介绍。