继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【对话ChatGPT】+使用ChatGPT自动化批量转换.xls文件为.xlsx文件

只是为了好玩
关注TA
已关注
手记 110
粉丝 24
获赞 122

图片

第1次提问:
我:我想使用Python批量转换.xls文件为.xlsx文件,请你提供代码
它:
当涉及到批量处理文件时,我们通常需要使用Python中的os模块和glob模块。os模块用于管理文件和目录,glob模块用于匹配文件路径名。下面是将所有.xls文件转换为.xlsx文件的Python代码:

import os
import glob
import pandas as pd

# 设置工作目录
os.chdir(r'path/to/your/folder')

# 循环遍历所有.xls文件
for file in glob.glob('*.xls'):
    # 读取.xls文件
    df = pd.read_excel(file)
    
    # 将文件名从.xls改为.xlsx
    new_filename = os.path.splitext(file)[0] + '.xlsx'
    
    # 将数据写入新文件
    df.to_excel(new_filename, index=False)
    
    # 删除旧文件
    os.remove(file)
    
    print(f"{file} 已转换为 {new_filename}")

将以上代码保存为.py文件并运行,注意替换代码中的"path/to/your/folder"为你的文件所在文件夹的路径。执行后,所有的.xls文件都将被转换为.xlsx文件。注意:如果你的.xls文件中包含多个工作表,则需要设置参数来指定需要转换的工作表。
输入路径和输出路径分开

第2次提问:

图片

我:请将上述代码封装成函数

它:好的,以下是将代码封装为函数的示例代码:

import os
import glob
import pandas as pd

def xls_to_xlsx(path):
    """
    将指定路径下所有的.xls文件转换为.xlsx文件
    """
    # 设置工作目录
    os.chdir(path)

    # 循环遍历所有.xls文件
    for file in glob.glob('*.xls'):
        # 读取.xls文件
        df = pd.read_excel(file)

        # 将文件名从.xls改为.xlsx
        new_filename = os.path.splitext(file)[0] + '.xlsx'

        # 将数据写入新文件
        df.to_excel(new_filename, index=False)

        # 删除旧文件
        os.remove(file)

        print(f"{file} 已转换为 {new_filename}")

可以将以上代码保存为.py文件,然后在其他Python脚本中导入该函数,并调用它以将指定路径下的所有.xls文件转换为.xlsx文件。例如:

from my_utils import xls_to_xlsx

# 调用函数,将所有.xls文件转换为.xlsx文件
xls_to_xlsx(r'path/to/your/folder')

请注意替换代码中的"path/to/your/folder"为你的文件所在文件夹的路径。
第3次提问:
图片

我:给函数xls_to_xlsx加注释,加docstring,并给出调用示例
它:好的,以下是添加注释、docstring并给出调用示例的代码:

import os
import glob
import pandas as pd

def xls_to_xlsx(path):
    """
    将指定路径下所有的.xls文件转换为.xlsx文件

    Args:
        path (str): .xls文件所在文件夹的路径

    Returns:
        None
    """
    # 设置工作目录
    os.chdir(path)

    # 循环遍历所有.xls文件
    for file in glob.glob('*.xls'):
        # 读取.xls文件
        df = pd.read_excel(file)

        # 将文件名从.xls改为.xlsx
        new_filename = os.path.splitext(file)[0] + '.xlsx'

        # 将数据写入新文件
        df.to_excel(new_filename, index=False)

        # 删除旧文件
        os.remove(file)

        # 打印转换信息
        print(f"{file} 已转换为 {new_filename}")

# 示例调用
if __name__ == '__main__':
    xls_to_xlsx(r'path/to/your/folder')

在上面的示例代码中,我们添加了docstring来描述函数的输入参数和返回值。另外,我们也在代码中加入了一些注释来解释每一步的具体操作。

示例调用中的if __name__ == '__main__':语句用于判断当前文件是否被作为主程序直接运行,如果是,则执行xls_to_xlsx()函数,如果不是,则不执行。这是一种良好的编程习惯,可以确保模块的可重用性和灵活性。

第4次提问:
图片

我:给函数xls_to_xlsx编写测试用例,使用unittest
它:好的,以下是使用unittest编写测试用例的代码:

import os
import glob
import pandas as pd
import unittest

def xls_to_xlsx(path):
    """
    将指定路径下所有的.xls文件转换为.xlsx文件

    Args:
        path (str): .xls文件所在文件夹的路径

    Returns:
        None
    """
    # 设置工作目录
    os.chdir(path)

    # 循环遍历所有.xls文件
    for file in glob.glob('*.xls'):
        # 读取.xls文件
        df = pd.read_excel(file)

        # 将文件名从.xls改为.xlsx
        new_filename = os.path.splitext(file)[0] + '.xlsx'

        # 将数据写入新文件
        df.to_excel(new_filename, index=False)

        # 删除旧文件
        os.remove(file)

        # 打印转换信息
        print(f"{file} 已转换为 {new_filename}")

class TestXlsToXlsx(unittest.TestCase):
    def setUp(self):
        self.test_folder = 'test_folder'
        os.mkdir(self.test_folder)

    def test_xls_to_xlsx(self):
        # 创建测试数据
        df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
        df.to_excel(f'{self.test_folder}/test.xls', index=False)

        # 调用函数
        xls_to_xlsx(self.test_folder)

        # 检查转换后的文件是否存在
        self.assertTrue(os.path.exists(f'{self.test_folder}/test.xlsx'))

    def tearDown(self):
        # 删除测试数据
        os.remove(f'{self.test_folder}/test.xlsx')
        os.rmdir(self.test_folder)

if __name__ == '__main__':
    unittest.main()

在上面的示例代码中,我们使用unittest.TestCase来编写测试用例。在setUp()函数中创建一个测试文件夹,然后在test_xls_to_xlsx()函数中创建一个测试文件,并调用xls_to_xlsx()函数来将该文件转换为.xlsx文件。最后,在tearDown()函数中删除测试文件和测试文件夹。

在运行该测试用例之前,请确保你的Python环境中安装了pandas和unittest库。运行该测试用例的命令为:

python test_xls_to_xlsx.py

测试用例应该执行成功,并输出一些信息。

开始编码。
目录结构:
图片描述

xls文件内容:
图片描述

运行报错:

图片描述

第5次提问:
图片描述

我:os.chdir(path) NotADirectoryError: [WinError 267] 目录名称无效。: 'D:\\abc\\chatgpt_test\\全国总人口10年数据 -备份.xls'
它:
您提供的错误消息表明您尝试更改为使用该os.chdir()功能的目录路径存在问题。具体来说,就是你指定的目录名不合法。

path该错误的一个可能原因是该函数的参数中指定的目录os.chdir()不存在。仔细检查您是否输入了正确的目录路径以及该目录是否存在。

此错误的另一个可能原因是参数path指向文件而不是目录。在这种情况下,您应该使用os.path.dirname()函数从文件路径中提取目录路径,然后再将其传递给os.chdir(). 例如:

import os

file_path = 'D:\\abc\\chatgpt_test\\全国总人口10年数据 -备份.xls'
dir_path = os.path.dirname(file_path)
os.chdir(dir_path)

file_path此代码使用从变量中提取目录路径os.path.dirname(),然后使用 将当前工作目录更改为生成的目录os.chdir()。

我恍然大悟,我应该这样调用就对了:
图片描述

查看转完文件格式后的内容是否正常:

图片上传不了了。见谅哈。

基本功能实现,但仍有一些细节问题需要处理。
不过,这写代码的速度确实很快。

我已投稿参与慕课网4月【对话ChatGPT】活动,所属战队【小咖3号】,快来加入我的战队,投稿分享快乐吧!
爱生活,爱编程,爱自己。

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP

热门评论

和只是为了好玩组队,完成慕课网与ChatGPT对话:

所属战队【小咖3号】

1. 只是为了好玩

2. 小刘同学牙

3. 小段

4. 

5.小HH

需要组队的可以艾特我。4号位有空缺。

组队后队员需要发布一篇手记。

欢迎评论下方留言。

查看全部评论