《Python学习》-- 实操篇一

一、文件操作

1. 1 读取文本文件

# 文件操作模式
# 'r' (默认) - 只读模式。文件必须存在,否则会抛出FileNotFoundError。在这种模式下,你只能读取文件内容,不能写入或追加。
# 'w' - 写入模式。如果文件存在,内容会被清空;如果文件不存在,会创建新文件。注意,'w'模式不会自动添加内容到现有文件末尾,而是覆盖文件。
# 'a' - 追加模式。如果文件存在,内容会被追加到文件末尾;如果文件不存在,会创建新文件。
# 'x' - 创建模式。如果文件不存在,会创建新文件并以写入模式打开;如果文件已存在,会抛出FileExistsError。
# 'b' - 二进制模式。与前面的模式结合使用,如'rb'(只读二进制)、'wb'(写入二进制)、'ab'(追加二进制)等。
# 't' - 文本模式(默认)。与前面的模式结合使用,如'rt'(只读文本)、'wt'(写入文本)等。在文本模式下,Python会处理换行符的转换。
# '+' - 更新模式。允许同时读取和写入。例如,'r+'、'w+'、'a+'。
# 'U' - 通用换行模式(在Python 3中已弃用,使用'r'和newline参数代替)。

# 打开一个文件
f = open('d:/log/致橡树.txt', 'r', encoding='utf-8')

# 读取全部内容

data = None
try:
    while True:
        data = f.read(16);
        if data == '':
            break
        else:
            print(data)
except:
    pass
finally:
    f.close()

1. 2 读取二进制文件

from   io  import  SEEK_SET,SEEK_END


# 打开一个文件.模式为rb,意思是读取二进制文件
file = open('d:/log/aaa.png', 'rb')
# 获取文件大小
# 将当前file对象的指针逸动到末尾
file.seek(0, SEEK_END)
# 返回当前文件指针的位置,即文件的大小
fileSize = file.tell()
# 将指针移到文件开头
file.seek(0, SEEK_SET)
while True:
    # 读取512个字节,一个扇区
    data = file.read(512)
    # 如果读取的字节为空,则退出循环
    if not data:
        break
    # 打印读取到的16个字节
    print(data)

1. 3 获取文件的摘要

# 计算文件的摘要
import hashlib
# 定义一个计算文件MD5哈希值的函数
def get_file_md5(file_path):
    # 初始化MD5哈希对象
    m = hashlib.md5()

    # 打开文件,以二进制模式('rb')读取
    with open(file_path, 'rb') as f:
        # 使用一个无限循环,直到文件读取完毕
        while True:
            # 读取4096字节的数据
            data = f.read(4096)

            # 如果没有更多数据(文件读取结束),退出循环
            if not data:
                break

            # 更新MD5哈希值
            m.update(data)

    # 返回计算得到的MD5哈希值,以16进制字符串形式
    return m.hexdigest()

if __name__ == '__main__':
    # 调用函数并传入文件路径
    print(get_file_md5('d:/log/aaa.png'))

1. 4 文件的写入

# 文件写入
# with: 上下文语法,with语句会自动关闭文件,不需要手动关闭
with open('d:/log/致橡树.txt', 'w', encoding='utf-8') as f:
    f.write('今天是2019年10月1日\n')
    f.write('今天是2019年10月2日\n')
    f.write('今天是2019年10月3日\n')

1. 5 文件的拷贝

# 文件拷贝
# 方式一:采用Python shutil 模块
import shutil
shutil.copyfile('d:/log/致橡树.txt', 'd:/log/致橡树_copy.txt')

# 方式二:自定义函数
def copy_file(src, dst):
    with open(src, 'rb') as f_src:
        with open(dst, 'wb') as f_dst:
            while True:
                data = f_src.read(4096)
                if not data:
                    break
                f_dst.write(data)

copy_file('d:/log/致橡树.txt', 'd:/log/致橡树_copy.txt')

1. 6 读取CSV文件

# 读取CSV文件
import csv
def read_csv(file_path):
    with open(file_path, 'r', newline='') as f:
        reader = csv.reader(f,delimiter=',')
        for row in reader:
            print(row)

 1. 7 Excel 操作

   读取xls文件

# excel操作
import xlrd   # 读取xls类型文件
import xlwt  # 生成excel文件, xls类型
import xlutils

import openpyxl # 读、写xlsx类型文件



# 读取excel文件
def read_excel(file_path):
    # 打开文件,返回workbook对象
    workbook = xlrd.open_workbook(file_path)
    # 获取所有sheet
    sheets = workbook.sheet_names()
    # 打印所有sheet名称
    print(sheets)
    # 获取第一个sheet
    # sheet1 = workbook.sheet_by_name('Sheet1')
    sheet1 = workbook.sheet_by_index(0)
    # 打印sheet的名称,行数,列数
    print(sheet1.name, sheet1.nrows, sheet1.ncols)
    # 遍历sheet中的所有行
    for row in range(sheet1.nrows):
        # 遍历sheet中的所有列
        for col in range(sheet1.ncols):
            # 获取单元格数据
            cell_value = sheet1.cell_value(row, col)
            print(cell_value)

# 打开一个已存在的excel文件写入
def write_excel(file_path):
    # 打开文件,返回workbook对象
    workbook1 = xlrd.open_workbook(file_path)

    workbook2 = xlutils.copy(workbook1)
    sheet1 = workbook2.get_sheet(0)
    sheet1.write(0, 0, 'hello')

    workbook2.save(file_path)

二、正则表达式

# 正则表达式
import re
# 根据输入的字符串去匹配是否是手机号
def is_mobile_phone(mobile_phone):
    # 1. 创建正则表达式对象,表示规则(手机号)
    pattern = re.compile(r'^1[3-9]\d{9}$')
    # 2. 使用正则表达式对象,匹配字符串,返回匹配对象
    match = pattern.match(mobile_phone)
    # 3. 获取匹配结果
    if match:
        return True
    else:
        return False


if __name__ == '__main__':
    print(is_mobile_phone('18988888888'))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季风泯灭的季节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值