【问题标题】:moving from one csv worksheet to the next in a python script在 python 脚本中从一个 csv 工作表移动到下一个工作表
【发布时间】:2011-05-27 13:29:41
【问题描述】:

我一直在使用 excel 创建我想使用 python 解析的 .csv 工作表。每个工作表都以商店命名(例如工作表 1:“Waitrose”,工作表 2:“Tesco”,工作表 3:“Asda”)并包含产品列表(第 1 列)及其相关价格(第 2 列)。我编写了一个 python 脚本,可以访问工作表并将内容转换为字典(见下文),但我正在努力寻找一种方法让程序访问工作簿中的下一个工作表。我想最终得到与工作表一样多的字典。 csv 模块似乎没有太大帮助,我找不到当前与 excel 打交道的第三方 python 3 兼容模块。我在想可能是applescript,但不确定如何将它嵌入到python脚本中

waitrose = {'apples' : 25, 'oranges' : 45 等}

有什么建议吗?

保罗。

【问题讨论】:

  • CSV 文件只能代表一个表格/工作表,所以我猜您将 Excel 文件导出为多个 CSV 文件,每个工作表一个。然后您必须按顺序阅读这些文件中的每一个。到目前为止你有什么?您的脚本读入哪个文件?为什么不使用csv 模块来读取CSV?您不能只使用os.listdir()glob.glob() 获取所有CSV 文件并使用您的代码依次读取每个文件吗?
  • Ferdinand Beyer 已经注意到 CSV 文件仅代表一个工作表。如果我没记错,当您将工作簿保存为 CSV 时,Excel 会警告您。如果您不使用多个文件,请查看可以处理 Excel 格式工作簿的模块。为此,您可以尝试python-xlsx。该模块可以通过多个工作表访问 .xlsx 文件中的数据,非常易于使用。

标签: python excel csv applescript worksheet


【解决方案1】:

每个工作表都必须保存为单独的 CSV。由于您已经能够解析单个 CSV,因此我将专注于处理单个文件。为每个 Excel 工作表创建 CSV 文件后,您可以使用 glob 模块遍历目录中的每个 .csv 文件。使用glob.glob(),您可以在路径中使用通配符,因此如果您只想要目录中的.csv 文件,请使用*.csv 通配符。

import glob
import os

for csvFilename in glob.glob("C:\\path-to-folder-with-csv\\*.csv"):
    # csvFilename now contains the full path to the next CSV in the folder

    # This will give us the basename of the file without the extension
    worksheet = os.path.basename(os.path.splitext(csvFilename)[0])

    if worksheet.lower() == "waitrose":
        # Parse Waitrose CSV...

    elif worksheet.lower() == "tesco":
        # Parse Tesco CSV...

    elif worksheet.lower() == "asda":
        # Parse Asda CSV...

【讨论】:

  • 我没有意识到,将在 excel 中创建的文件保存为 .csv 文件时,实际上只是将单个工作表保存为文件,而不是 excel 工作簿。我改变策略并使用您在回答中建议的方法。谢谢。
【解决方案2】:

我没用过,但你看过 xlrd 模块吗?它似乎可以处理读取常规 Excel 文件,包括工作表。

https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2020-05-23
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    相关资源
    最近更新 更多