【问题标题】:Python: TypeError: coercing to Unicode: need string or buffer, PosixPathPython:TypeError:强制转换为 Unicode:需要字符串或缓冲区,PosixPath
【发布时间】:2021-01-23 02:51:08
【问题描述】:

我正在尝试运行此 python 脚本,该脚本试图使用在同一 xslx 中的列中找到的文件名重命名 xslx 文件。 (原脚本找到Here

import os
from pathlib import Path

import xlrd

def rename_excel_files(path):
    path = Path(path)

    for filename in os.listdir(path):
        file_path = path.joinpath(filename)
        excel_file = xlrd.open_workbook(file_path)
        work_sheet = excel_file.sheet_by_index(1)
        dest_path = path.joinpath(work_sheet.cell_value(20, 0) + '.xlsx')
        os.replace(file_path, dest_path)

if __name__ == '__main__':
     rename_excel_files(r'/Users/User/OQC')

但是在python2运行时出现如下错误:

  File "oqc_rename.py", line 18, in <module>
    rename_excel_files(r'/Users/User/OQC')
  File "oqc_rename.py", line 10, in rename_excel_files
    for filename in os.listdir(path):
TypeError: coercing to Unicode: need string or buffer, PosixPath found

更新:运行 python3 时出现错误:

 File "/Users/user/OQC/oqc_rename.py", line 19, in <module>
    rename_excel_files(r'/Users/user/OQC')
  File "/Users/user/OQC/oqc_rename.py", line 12, in rename_excel_files
    excel_file = xlrd.open_workbook(file_path)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/xlrd/__init__.py", line 148, in open_workbook
    bk = book.open_workbook_xls(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/xlrd/book.py", line 92, in open_workbook_xls
    biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/xlrd/book.py", line 1278, in getbof
    bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/xlrd/book.py", line 1272, in bof_error
    raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\x00\x00\x00\x01Bud1'

根据我的搜索,我认为问题可能是我在重命名之前已经打开了文件? 确认 xlsx 文件没有损坏。 但是,我不确定如何解决这个问题,因为我是一个 python 菜鸟。

提前致谢!

【问题讨论】:

标签: python xlrd pathlib


【解决方案1】:

xlrd.open_workbook 期待一个字符串,只需将 Path 对象表示为一个,它应该很高兴

-xlrd.open_workbook(path)
+xlrd.open_workbook(str(path))

请注意官方文档说不支持非.xls 文件: https://pypi.org/project/xlrd/

此库将不再读取 .xls 文件以外的任何内容。有关读取较新文件格式的替代方案,请参阅http://www.python-excel.org/

【讨论】:

  • 感谢您的反馈!在我这样做之后,现在我看到了与在 python2 和 python3 中运行脚本相同的错误。
  • 非常棒!看起来图书馆根本不支持新格式,所以另一个第三方图书馆可能适合你。
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2011-10-04
  • 2011-05-13
  • 2012-06-06
  • 2018-05-07
  • 1970-01-01
  • 2021-03-28
相关资源
最近更新 更多