第八章 Python文件操作

文章目录

一、文件夹操作:

例题8-1:利用 os 列出当前目录的绝对路径,及其下的所有子目录、所有文件。

代码如下:

import os

# 当前IDEL所处的文件夹的绝对路径:'C:\\qun\\project\\exercise'
print(os.path.abspath('.'))
# 当前所处的文件夹上一级文件夹的绝对路径:'C:\\qun\\project'
print(os.path.abspath('..'))
# 列出当前目录下,所有的文件夹及文件,返回一个列表
print(os.listdir())
# 列出c:\\目录下,所有的文件夹及文件,返回一个列表
print(os.listdir('c:\\'))
y = [f for f in os.listdir(r'.\\') if f.endswith(
    ('.py', '.txt'))]  # r 表示后面的字符不转义
print(y)  # 将当前目录下后缀为py、txt的所有文件增加到列表中,并输出

运行结果:
在这里插入图片描述

例题8-2:利用os.path创建目录、创建多级目录,判断目录、文件是否存在。

代码如下:

import os

# 创建一个目录:c:\\qun1
os.mkdir('c:\\qun1')
# 一次性创建多级目录:c:\\qun1\\test
os.makedirs('c:\\qun1\\test')
# 判断指定的目录是否存在,输出:True、或False
print(os.path.isdir('c:\\qun1\\test'))
# 判断指定的文件是否存在,输出:True、或False
print(os.path.isfile(r'c:\\qun1\\test\\test.txt'))
# 判断指定的文件是否存在,输出:True、或False
print(os.path.exists(r'c:\\qun1\\test\\test.txt'))
# 判断指定的目录是否存在,输出:True、或False
print(os.path.exists(r'c:\\qun1\\test'))
# 将路径和文件连接:'c:\\qun1\\test\\test.txt'
os.path.join('c:\\qun1\\test\\hybni.txt', 'test.txt')

运行结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

例题8-3:利用shutil复制、移动目录及文件。

代码如下:

import os
import shutil

# 将路径和文件链接:'c:\\qun1\\test\\test.txt'
os.path.join('c:\\qun1\\test', 'test.txt')
# 改变工作目录:将c:\\qun1\\test设为当前工作目录
os.chdir("c:\\qun1\\test")
# 拷贝当前工作目录下的test.txt至c:\\qun1\\test\\test_copy.txt
shutil.copyfile("test.txt", "c:\\qun1\\test\\test_copy.txt")
# 将当前工作目录下的test.txt文件移至c:\\qun1\\test\\test_copy.txt
shutil.move("test.txt", "c:\\qun1\\test\\test_copy.txt")
os.remove("c:\\qun1\\test\\test_copy.txt")  # 删除指定的文件
# 将c:\\qun1\\test\\test下的目录、文件,复制到新路径下
shutil.copytree("c:\\qun1\\test", "c:\\qun1\\newdir")

运行结果:
在这里插入图片描述

课堂练习1:向hello.txt中写入10行“Hello World!行号”

代码如下:

f = open('hello.txt', 'w+', encoding='utf8')
for i in range(1, 11):
    f.write("HelloWorld! "+str(i)+"\n")
f.close()

f1 = open('hello.txt', 'r', encoding='utf8')
c = f1.readlines()
for j in c:
    print(j, end='')
f1.close()

运行结果:
在这里插入图片描述
在这里插入图片描述

课堂练习2:将hello.txt中的字符串“World”全部替换成字符串“Python”,并将结果存入hello2.txt。

代码如下:

f1 = open('hello.txt', 'r', encoding='utf8')
f2 = open('hello2.txt', 'w+', encoding='utf8')
for s in f1.readlines():
    f2.write(s.replace("World", "Python"))
f1.close()
f2.close()

运行结果:
在这里插入图片描述

二、读写文本案例:

例题8-4:向文本文件中写入内容,然后再读出。用w 模式打开文件时,若文件不存在,则会自动创建它。

代码如下:

s1 = '我在学Python.\n文本文件的读写\n'               # 转义字符\n表示换行
s2 = ['人生苦短', '我学Python.']                    # 所有元素,作为一行,添加
s3 = ['人生苦短\n', '我学Python\n']                 # 元素后面有换行符,可作为多行添加

with open('c:\\qun1\\test\\test.txt', 'w') as fp:  # w 模式会清空文件原有内容
    # write(s1):将字符串s1 一次性写入
    fp.write(s1)
    # writelines (s2):将列表s2元素迭代写入
    fp.writelines(s2)
    fp.writelines(s3)

with open('c:\\qun1\\test\\test.txt') as fp:        # 默认按 r 模式打开文件
    # 一次性读取所有内容,返回一个字符串
    print(fp.read())

运行结果:
在这里插入图片描述
在这里插入图片描述

例题8-5:如果想保留原文件内容,只是在文件末尾添加,可用a模式打开文件。此时,若文件不存在,也会自动创建它。

代码如下:

s = '我在学Python.\n文本文件的读取\n'                 # 转义字符\n表示换行

with open('c:\\qun1\\test\\test.txt', 'a+') as fp:  # a+ 模式会保留原内容,并在文件末尾添加内容
    fp.write(s)

with open('c:\\qun1\\test\\test.txt') as fp:
    # readlines()不传参数,默认读取所有行,r为列表
    r = fp.readlines()

运行结果:
在这里插入图片描述

例题8-6:用readline()或readlines()遍历并输出文本文件的内容。

代码如下:

#j用于计数
j = 0
with open('三国演义.txt', encoding='gb18030') as fp:   # 打开文本文件,with语句块内自动关闭
    while j < 10:
        line = fp.readline()                          # 每次读取一行,返回的字符串为该行内容
        print("(" + str(j) + ")", line)
        j += 1

运行结果:
在这里插入图片描述

例题8-7:编写程序,将c盘根目录下所有文本文件中,含有字符串“密码”的所有文件名,写入到一个文件中。

代码如下:

import os
# 列表推导式:c盘根目录下所有“.txt”的文本文件

y = [f for f in os.listdir('c:\\') if f.endswith(('.txt',))]
# 定义空列表,将查找成功的文件名,添加进去
x = []

for f in y:
    # ------------ 对所有文本文件名进行迭代 ------------------
    with open('c:\\' + f, encoding='gb18030') as fp:  # 用with语句块处理打开的文件
        for line in fp:                               # 对打开的文件,逐行读取
            if '密码' in line:                        # 若字符串'密码'在该行里
                # 将文件名添加到列表中
                x.append(f)
                # 跳出本轮循环,开始下一轮循环
                break
f = open('c:\\qun1\\\\myTest.txt', 'a+',
         encoding='gb18030')    # 追加模式打开,若文件不存在,创建之
f. writelines(x)
f.close()

运行结果:
在这里插入图片描述

三、使用open()读写二进制文件:

例题8-8:将MySQL 8.0数据库文件 smstock.ibd写入到新文件smstock_new.ibd中

代码如下:

with open('c:\\qun1\\test\\smstock.ibd', 'rb') as f:                 # 以二进制格式、采用只读模式打开文件
    s = f.readline()
    # 返回字节串(btyes): b'\x01\x0f\x00\...'
    print(s)

with open('c:\\qun1\\test\\smstock_new.ibd', 'wb+') as fp:
    fp.write(s)
    print('MySQL 数据库文件,读写成功!')

运行结果:
在这里插入图片描述
在这里插入图片描述

例题8-9:将图片文件“格利高里·派克.jpg”写入到新文件“格利高里_new.jpg”中

代码如下:

with open('c:\\qun1\\test\\格利高里·派克.jpg', 'rb') as fp:
    data = fp.read()
    print(type(data))  # <class 'bytes'>
    print(data)  # Squeezed text (2041 lines)

with open('c:\\qun1\\test\\格利高里_new.jpg', 'wb+') as fp:
    fp.write(data)
    print("图片文件,读写成功!")

运行结果:
在这里插入图片描述
在这里插入图片描述

四、使用pickle模块读写dat文件:

例题8-10:使用pickle的dump()方法序列化数据,并写入dat二进制文件中

代码如下:

import pickle

x = [1, 2, 3]
y = ('a', 'b', 'c')
z = {4, 5, 6}
d = {'学号': '01', '姓名': '张三', 'age': 18}
data = (100, 'Python', x, y, z, d)  # 将各种数据变量,放在一个元组中

with open('c:\\qun1\\test\\test_pickle.dat', 'wb') as f:
    try:                            # 处理意外
        for d in data:              # 对data中的元素进行迭代
            # 对每一个元素,进行序列化并写入文件对象
            pickle.dump(d, f)
        print('写dat文件成功。')     # 迭代完成后,保存文件,并自动关闭文件
    except:
        print('写dat文件失败。')

运行结果:
在这里插入图片描述

例题8-11:使用pickle的load()方法反序列化数据,并输出dat二进制文件内容

代码如下:

import pickle

with open('c:\\qun1\\test\\test_pickle.dat', 'rb') as f:
    end = False                                # 定义一个逻辑变量,判断文件是否到了结尾
    while not end:                             # 一次dump()方法,对应一次load()方法
        try:
            x = pickle.load(f)                 # 读取并反序列化每个数据
            # 输出的内容,与原序列化前的内容一致
            print(x)
        except:
            end = True

运行结果:
在这里插入图片描述

五、使用xlrd、openpyxl 模块读Excel 文件:

例题8-15:读取“年度新生人口和死亡人口.xls”的内容。该文件收录了1949-2016年期间,我国部分地区新生人口、死亡人口、净增人口数据。

代码如下:

import pickle

import xlrd

wb = xlrd.open_workbook("c:\\qun1\\test\\年度新生人口和死亡人口.xls")  # 打开文件
sheet = wb.sheet_by_index(0)   # 通过索引获取表格

for i in range(sheet.nrows):   # 按行数迭代
    row = sheet.row_values(i)  # 获取第 i行,返回列表
    print(row)


运行结果:
在这里插入图片描述

在这里插入图片描述

例题8-16:用 openpyxl 库创建 xlsx 文件,并写入数据

代码如下:

import openpyxl
wb = openpyxl.Workbook()
# 创建Workbook,并默认会创建一个空表,名称为:Sheet
# 获取默认的sheet,并激活
ws1 = wb.active
ws1.title = 'Sheet1'                         # 设置Sheet名称
ws1['A1'] = '姓名'                           # 给单个单元格一个列名
ws1['B1'] = '年龄'
# 写入多个单元格(从有数据的行的下一行写入)
ws1.append(['张三', 18])
ws1.append(['李四', 19])
ws2 = wb.create_sheet('Sheet2')              # 创建一个新sheet,可以指定名称
# 复制Sheet1,新sheet名称为Sheet1 Copy
ws3 = wb.copy_worksheet(wb['Sheet1'])
print(wb.sheetnames)                         # 打印所有表名
wb.save('c:\\qun1\\test\\test.xlsx')         # 保存

运行结果:
在这里插入图片描述
在这里插入图片描述

总结

通过运行ppt上的程序学到了利用python对文件进行操作,为今后的学习的打下基础。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值