You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中转换已下载PDF为CSV:glob无法识别目录文件问题

问题分析与修复方案

你的代码存在多个关键问题,导致glob无法识别文件且转换逻辑错误,以下是具体问题和修复方案:

核心问题点

  • 未导入os模块:代码中使用os.chdir(path)但未导入os,会触发NameError。
  • 文件类型匹配错误:你下载的是PDF文件,但glob却查找*.csv文件,完全不匹配。
  • 路径转义错误:字符串'mypath\*.csv'中的反斜杠是Python转义字符,会导致路径解析异常,需改用原始字符串或双反斜杠。
  • 下载文件无扩展名:命名为URL1、URL2的文件没有.pdf后缀,glob匹配*.pdf时会忽略这些文件。
  • 转换逻辑颠倒:你试图把CSV转成CSV,实际需求是将PDF转换为CSV。

修复后的代码

import requests
import os
import glob
import tabula

# 创建URL与带PDF后缀的文件名列表
urls = [('report_2023.pdf', 'https://www.health.ny.gov/statistics/sparcs/reports/compliance/2023/c2023_sub012023_000401.pdf'),
        ('report_2022.pdf', 'https://www.health.ny.gov/statistics/sparcs/reports/compliance/2022/c2022_sub012023_000401.pdf')]

# 遍历URL并下载PDF文件
path = 'mypath'
# 确保目标目录存在,避免切换目录失败
os.makedirs(path, exist_ok=True)
os.chdir(path)

def download_pdf(file_info):
    filename, url = file_info
    r = requests.get(url, stream=True)
    # 检查请求是否成功,失败则抛出异常
    r.raise_for_status()
    with open(filename, 'wb') as f:
        # 分块下载更高效稳定
        for chunk in r.iter_content(chunk_size=8192):
            f.write(chunk)

for item in urls:
    download_pdf(item)

# 遍历目录中的PDF文件并转换为CSV
for pdf_file in glob.glob('*.pdf'):
    # 生成对应CSV文件名,避免冗余后缀
    csv_file = os.path.splitext(pdf_file)[0] + '.csv'
    tabula.convert_into(pdf_file, csv_file, output_format='csv', pages='all')

额外优化说明

  • 添加os.makedirs(path, exist_ok=True):自动创建目标目录,避免因目录不存在报错。
  • 使用r.iter_content()分块下载:相比逐字节写入,更适合大文件下载,稳定性更高。
  • 增加请求状态检查:下载失败时直接抛出异常,便于快速排查问题。
  • 规范文件命名:给下载文件添加.pdf后缀,确保glob能正确匹配。
  • 生成合理CSV文件名:避免出现xxx.pdf.csv这类冗余文件名。

内容的提问来源于stack exchange,提问作者6114617

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:23:06