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

Jupyter Lab可运行的Python代码在命令行无报错却无法执行求助

命令行执行Python脚本无反应但Jupyter正常的问题排查

以下是你的代码:

import pandas as pd
import os

def list_files(folder_path):
    files = []
    for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        if os.path.isfile(file_path):
            files.append(file_name)
    return files

file_path = input("Enter the output files path")
folder_path = input("Enter the input files path")
file_list = pd.Series(list_files(folder_path))
csv_data_source = []

for files in file_list:
    dfinv = pd.read_excel(folder_path + files,sheet_name="Import")
    dfscn = pd.read_excel(folder_path + files,sheet_name="ScannedPartNumbers")
    partmaster = pd.read_csv('part_master.csv',encoding='latin1',low_memory=False)
    dfscn = dfscn[dfscn['ScannedPartNumber'].str.len() != 71]
    dffnl = pd.DataFrame(columns = ['InvNo','PartNo','ScnSumQty','ScnAvgMRP','InvAvgMRP','InvGST','MRPDiff','TotDiff'])
    
    dfscn['scnpartno'] = dfscn['ScannedPartNumber'].str.slice(start=30,stop=48)
    dfscn['scnpartqty'] = dfscn['ScannedPartNumber'].str.slice(start=49,stop=55)
    dfscn['scnpartmrp'] = dfscn['ScannedPartNumber'].str.slice(start=56,stop=66)
    dfscn['scnpartno'] = dfscn['scnpartno'].str.strip()
    #dfscn['scnpartno'] = pd.to_char(dfscn['scnpartno'])
    dfscn['scnpartqty'] = pd.to_numeric(dfscn['scnpartqty'])
    dfscn['scnpartmrp'] = pd.to_numeric(dfscn['scnpartmrp'])
    dfinv['Qty'] = pd.to_numeric(dfinv['Qty'])
    dfinv['MRP'] = pd.to_numeric(dfinv['MRP'])
    unpano = pd.Series(dfscn['scnpartno'].unique())
    
    for pnum in unpano:
        if (dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartmrp'].mean()) != (dfinv.loc[dfinv['Part #'] == pnum,'MRP'].mean()):
            dffnl.loc[pnum,'InvNo'] = files
            dffnl.loc[pnum,'PartNo'] = pnum
            dffnl.loc[pnum,'ScnSumQty'] = dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartqty'].sum()
            dffnl.loc[pnum,'ScnAvgMRP'] = dfscn.loc[dfscn['scnpartno'] == pnum,'scnpartmrp'].mean()
            dffnl.loc[pnum,'InvAvgMRP'] = dfinv.loc[dfinv['Part #'] == pnum,'MRP'].mean()
            dffnl.loc[pnum,'InvGST'] = partmaster.loc[partmaster['Part Number'] == pnum,'GST'].mean()
            dffnl['MRPDiff'] = dffnl['ScnAvgMRP'] - dffnl['InvAvgMRP']
            dffnl['TotDiff'] = dffnl['MRPDiff'] * dffnl['ScnSumQty']
    dffnl.to_csv(file_path + files + ".csv",index = False)

print("Files generation successful")

for f1 in os.listdir(file_path):
    if f1.endswith('.csv'):
        f1 = os.path.join(file_path, f1)
        combineddf = pd.read_csv(f1)
        csv_data_source.append(combineddf)

merged_df = pd.concat(csv_data_source, axis = 0)
merged_df.to_csv(file_path + 'merged.csv',index=False)

print("Data merging successful")

你的代码在Jupyter Lab正常运行,但命令行无输出也不执行,核心原因是环境不一致、路径错误和缺少错误反馈,以下是具体排查和修复步骤:

1. 确认Python环境一致性

Jupyter Lab和命令行可能使用不同的Python解释器,导致依赖包缺失或版本不兼容:

  • 在Jupyter中执行:
    import sys
    print(sys.executable)
    print(pd.__version__)
    
  • 在命令行执行:
    python --version
    which python  # Linux/macOS
    where python  # Windows
    pip show pandas
    

对比两者的Python路径和pandas版本,如果不一致,用Jupyter对应的解释器运行脚本,比如:

# 假设Jupyter用的是conda环境
conda activate your_env_name
python your_script.py

2. 修复路径拼接问题

代码中直接用+拼接路径,会因操作系统分隔符(Windows用\,Linux/macOS用/)或输入路径未加结尾分隔符导致路径错误,全部改用os.path.join:

  • 替换folder_path + files为os.path.join(folder_path, files)
  • 替换file_path + files + ".csv"为os.path.join(file_path, f"{files}.csv")
  • 替换file_path + 'merged.csv'为os.path.join(file_path, 'merged.csv')

同时,在获取输入路径后,用os.path.normpath标准化路径,避免格式问题:

file_path = input("Enter the output files path: ")
file_path = os.path.normpath(file_path)
folder_path = input("Enter the input files path: ")
folder_path = os.path.normpath(folder_path)

3. 修复part_master.csv的路径问题

Jupyter的工作目录是打开的文件夹,但命令行执行时的工作目录是终端当前目录,导致找不到part_master.csv。改为使用脚本所在目录的绝对路径:

script_dir = os.path.dirname(os.path.abspath(__file__))
partmaster = pd.read_csv(os.path.join(script_dir, 'part_master.csv'), encoding='latin1', low_memory=False)

4. 添加错误捕获与日志

脚本没有异常处理,遇到错误会静默终止,添加try-except块打印错误信息,比如在读取Excel文件时:

for files in file_list:
    try:
        dfinv = pd.read_excel(os.path.join(folder_path, files), sheet_name="Import")
        dfscn = pd.read_excel(os.path.join(folder_path, files), sheet_name="ScannedPartNumbers")
    except Exception as e:
        print(f"处理文件 {files} 失败: {str(e)}")
        continue
    # 后续代码保持不变

5. 检查依赖包

确保命令行环境安装了读取Excel所需的库:

pip install pandas openpyxl xlrd

openpyxl用于读取.xlsx文件,xlrd用于读取.xls文件。

内容的提问来源于stack exchange,提问作者Manjunath Rampure S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:37